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的讀鎖已經這樣做了「 我不認爲這是真的。只有在選擇...鎖定共享模式時,這纔是真實的 –