2010-11-23 79 views
0

我一直在阅读有关MySQL的交易,但我无法理解一个问题。 事务是一种确保在一个语句块中执行全部或全部执行的方法。但是,事务是否确保对其中一部分行进行“锁定”?也就是说,说我有下面的语句(伪):MySQL交易问题

1) START TRANSACTION 
2) SELECT row1 FROM table 
3) UPDATE table SET row1='new value' 
4) COMMIT 

现在,假设一个用户试图在其中系统是在上述第3行的时间访问ROW1 ..请问该用户有权访问的行(然后他可以看到row1的旧值),还是必须等到事务处理完成,然后才能使用新值读取该行。

谢谢! Joel

回答

2

不,事务和隔离是两个单独的概念。

五隔离级别:

  1. 读取已提交意味着禁止脏读;不可重复读取和幻像读取可能发生。
  2. 读取未提交表示可能发生脏读,不可重复读取和幻读。
  3. 可重复读取意味着防止脏读和不可重复读取;幻像读取可能会发生。
  4. 可串行化意味着可以防止脏读,不可重复读取和幻像读取。
0

当您启动一个事务时,只有在提交事务后,您所做的更改才变为可见。它更像是一个孤立的而不是锁。

HTH

2

这取决于。请参阅MySQL SELECT statement syntax,特别是FOR UPDATELOCK IN SHARE MODE

“如果对使用页锁或行锁的存储引擎使用FOR UPDATE,查询检查的行将被写锁定,直到当前事务结束。使用LOCK IN SHARE MODE设置共享锁,允许其他事务读取被检查的行但不更新或删除它们。“