假设我有学生和学校表。我正在执行的一项操作是:
我不担心这种情况:两个人同时编辑学校/学生。一个提交他们的更改。不久之后,其他人提交了他们的更改。这不会是一个问题,因为在第二个用户的情况下,应用程序会注意到他们正在尝试覆盖新版本。
我我担心:有人打开学校/学生的编辑器(涉及从表中读取),同时正在运行正在修改它们的事务。
基本上,在事务修改表时,应该无法运行读取。另外,写入也不应该同时发生。
答案 0 :(得分:3)
只有在可序列化的隔离级别中,MySQL才允许您读取另一个事务正在修改的行。在任何较低的隔离级别中,您将看到它们在事务之前处于状态的行,它们已经启动了修改它们。当然,在READ_UNCOMITTED中,虽然事务尚未完成,但行将被视为已删除/已修改。
如果您使用select for update,
答案 1 :(得分:0)
您可以使用锁定表来防止这种情况发生。有关锁定表的更多信息,请查看this
修改强>
看看这个how to lock some row as they don't be selected in other transaction。认为类似的方法也可以应用于表