在网上搜索有关事务隔离级别的信息之后,我了解MySQL中的Row Locking可以通过使用SELECT...FOR UPDATE
或LOCK 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的代码示例中,事务的事务隔离级别和开始是显式的。在某个博客中,我读到了
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
并仍然得到相同的结果。换句话说,语句 UPDATE语句在事务中受影响的行上隐式创建READ锁定的真实性。