我一直在阅读MySQL中的交易,但我无法理解一个问题。 事务是一种确保在一个语句块中执行所有操作或不执行任何操作的方法。但是,事务是否确保“锁定”作为其一部分的行?也就是说,我有以下陈述(伪):
1) START TRANSACTION
2) SELECT row1 FROM table
3) UPDATE table SET row1='new value'
4) COMMIT
现在,假设一个用户试图在系统位于上面的第3行时访问row1 ..该用户是否可以访问该行(然后他可以看到row1的旧值),或者他是否有等到事务结束,然后才会使用新值获取行。
谢谢! 乔尔
答案 0 :(得分:2)
不,交易和隔离是两个独立的概念。
五个层次的隔离:
答案 1 :(得分:2)
这取决于。请参阅MySQL SELECT statement syntax,具体为FOR UPDATE
和LOCK IN SHARE MODE
。
“如果对使用页锁或行锁的存储引擎使用FOR UPDATE,则查询检查的行将被写入锁定,直到当前事务结束。使用LOCK IN SHARE MODE设置允许其他事务的共享锁阅读已检查的行但不更新或删除它们。“
答案 2 :(得分:0)
启动事务时,只有在提交事务后,您所做的更改才会显示。它更像是一个孤岛而不是一个锁。
HTH