pil*_*ght 4 mysql sql database transactions
假设我这样做(注意:下面的语法可能不正确,但不要担心它...它只是在那里提出一个观点)
Start Transaction
INSERT INTO table (id, data) VALUES (100,20), (100,30);
SELECT * FROM table WHERE id = 100;
End Transaction
Run Code Online (Sandbox Code Playgroud)
因此,select的目标是从刚刚插入的表中获取所有信息,并且仅由前面的INSERT插入...
现在假设在执行期间,INSERT执行后,其他一些用户也执行一个id = 100的INSERT ...
事务的下一步中的SELECT语句是否也会获得其他用户执行的INSERT插入的行,或者只是获取事务中前面的INSERT插入的两行?
顺便说一下,我正在使用MySQL,所以请定制你的MySQL答案
这完全取决于数据库连接使用的事务隔离.

页面420描述了隔离级别处理的三个事务条件
页面421描述了四(4)个事务隔离级别:
可以在全局,会话内或特定事务中为数据库会话设置隔离级别:
SET GLOBAL TRANSACTION ISOLATION LEVEL isolation_level;
SET SESSION TRANSACTION ISOLATION LEVEL isolation_level;
SET TRANSACTION ISOLATION LEVEL isolation_level;
Run Code Online (Sandbox Code Playgroud)
其中isolation_level是以下值之一:
'READ UNCOMMITTED''READ COMMITTED''REPEATABLE READ''SERIALIZABLE'在my.cnf你可以设置默认的还有:
[mysqld]
transaction-isolation = READ-COMMITTED
Run Code Online (Sandbox Code Playgroud)