"更新"行阻止是否也适用于连接表?

Mat*_*iak 9 mysql sql select sql-update

我在事务中进行了2次查询:SELECT(包含JOIN子句)和UPDATE.要求所选行中的数据在更新完成之前不会更改,因此我使用FOR UPDATE子句.我的问题是:'for update'是仅适用于从FROM子句中指定的表中选择的部分数据还是来自连接表的数据?我的DBMS是MySql.

小智 6

文件只是说,这个锁是在读取的行数不除外连接表,所以它应该是对所有的连接表中的所有记录.如果只想锁定其中一个表中的行,可以单独执行:'SELECT 1 FROM keytable WHERE ... FOR UPDATE'.

也就是说,不需要简单地阻止SELECT和UPDATE之间的更新.SELECT上的读锁定已经完成了.FOR UPDATE的目的是防止另一个事务读取行,从而可能导致死锁,因为在另一个事务释放其读锁之前无法应用UPDATE.

  • "那就是说,不需要简单地阻止SELECT和UPDATE之间的更新.SELECT上的读锁已经做到了这一点"我不认为这是真的.只有当你选择...锁定共享模式时才会出现这种情况 (3认同)