使用FOR UPDATE时,READ COMMITED事务隔离级别是否隐含?

时间:2017-02-10 20:19:16

标签: php mysql database transactions distributed-transactions

在网上搜索有关事务隔离级别的信息之后,我了解MySQL中的Row Locking可以通过使用SELECT...FOR UPDATELOCK IN SHARE MODE来实现,并且行锁定查询必须在启动后执行交易。所以我遇到了一个例子,说明了两个会话的READ COMMITTED隔离级别的实现,如下所示:

--session 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

BEGIN TRANSACTION;

SELECT FirstName FROM EmployeeInfo
WHERE EmpID = 1;

WAITFOR DELAY '00:00:05'  

SELECT FirstName FROM EmployeeInfo
WHERE EmpID = 1;

ROLLBACK TRANSACTION;

会话2的代码如下:

 --session 2
 UPDATE EmployeeInfo
 SET FirstName = 'Frank'
 WHERE EmpID = 1;

在session1的代码示例中,事务的事务隔离级别开始是显式的。在某个博客中,我读到了

  • UPDATE语句隐式地在事务中受影响的行上创建READ锁。 这是否意味着我可以安全地从会话1中省略SET TRANSACTION ISOLATION LEVEL READ COMMITTED;并仍然得到相同的结果。换句话说,语句 UPDATE语句在事务中受影响的行上隐式创建READ锁定的真实性。

0 个答案:

没有答案