MySQL交易问题

时间:2010-11-23 10:10:20

标签: mysql

我一直在阅读MySQL中的交易,但我无法理解一个问题。 事务是一种确保在一个语句块中执行所有操作或不执行任何操作的方法。但是,事务是否确保“锁定”作为其一部分的行?也就是说,我有以下陈述(伪):

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

现在,假设一个用户试图在系统位于上面的第3行时访问row1 ..该用户是否可以访问该行(然后他可以看到row1的旧值),或者他是否有等到事务结束,然后才会使用新值获取行。

谢谢! 乔尔

3 个答案:

答案 0 :(得分:2)

不,交易和隔离是两个独立的概念。

五个层次的隔离:

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

答案 1 :(得分:2)

这取决于。请参阅MySQL SELECT statement syntax,具体为FOR UPDATELOCK IN SHARE MODE

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

答案 2 :(得分:0)

启动事务时,只有在提交事务后,您所做的更改才会显示。它更像是一个孤岛而不是一个锁。

HTH