MySQL documentation表示SELECT FOR UPDATE設置IX鎖。 IX鎖意圖排他鎖,當它發出時意味着「事務T意圖在掃描行上設置X(獨佔)鎖」。這意味着,SELECT FOR UPDATE成功之前,它必須首先獲得IX和X.然後MySQL的術語說,這大約意向獨佔鎖:MySQL innodb select for update concurrency
意向鎖定
一種鎖適用於表級,使用以指示事務打算在表中的行上獲取什麼類型的鎖。不同的交易可以在同一張桌子上獲得不同種類的意向鎖,,但是第一個獲得意向獨佔(IX)鎖的表上的交易可以防止其他交易獲得表上的任何S或X鎖。相反,獲取表上意向共享(IS)鎖的第一個事務可防止其他事務獲取表上的任何X鎖。兩階段過程允許按順序解決鎖定請求,而不會阻止鎖定和相應的兼容操作。有關此鎖定機制的更多詳細信息,請參見第14.3.5.3節「InnoDB鎖定模式」。
另外IX和IX是兼容的(鎖類型兼容性矩陣),這意味着如果事務1發出IX並且在另一個併發事務之後發生IX,它將成功。
是否有可能在同一時刻發佈兩個併發IX,MySQL爲同一個表的兩個事務授予/獲取IX。或者,如果併發IX被髮布,MySQL在任何時候只授予一個IX。我認爲MySQL只授予其中的一個,即使在同一時間在MySQL端進行調用和觸發。編輯:基本上如果我概括我的問題:如果兩個(併發)的SQL語句鎖定行(例如更新,選擇更新,選擇鎖定共享模式,插入,刪除)來到MySQL在同一時間,我想MySQL會順序處理它們。只是想確定一下,我正在思考MySQL如何在內部工作。