9
我在事务中做2个查询:SELECT(包含JOIN子句)和UPDATE。要求所选行中的数据在更新完成前不会更改,所以我使用FOR UPDATE子句。我的问题是:'for update'是否仅适用于从FROM子句中指定的表中选择的数据的一部分或来自连接表的数据?我的DBMS是MySql。对于更新行阻止是否也适用于连接的表?
我在事务中做2个查询:SELECT(包含JOIN子句)和UPDATE。要求所选行中的数据在更新完成前不会更改,所以我使用FOR UPDATE子句。我的问题是:'for update'是否仅适用于从FROM子句中指定的表中选择的数据的一部分或来自连接表的数据?我的DBMS是MySql。对于更新行阻止是否也适用于连接的表?
documentation只是说锁在行上读取时不会除了连接的表,所以它应该在所有连接表上的所有记录上。如果只想锁定其中一个表中的行,可以分别执行:'SELECT 1 FROM keytable WHERE ... FOR UPDATE'。
也就是说,这并不需要简单地阻止SELECT和UPDATE之间的更新。 SELECT上的读锁已经做到了。 FOR UPDATE的目的是为了防止另一个事务读取行并因此可能导致死锁,因为直到另一个事务释放其读取锁才能应用UPDATE。 “
”这就是说,这不是简单地阻止SELECT和UPDATE之间的更新所需要的。对SELECT的读锁已经这样做了“ 我不认为这是真的。只有在选择...锁定共享模式时,这才是真实的 –