堆棧PHP應用程序:防止MySQL的死鎖在使用SELECT ... LOCK IN SHARE MODE
如果我沒有理解SELECT ... LOCK IN SHARE MODE正確的,你可以把它變成一個MySQL的交易選擇在該事務期間您將使用的行將從其他會話的寫入/刪除操作中「鎖定」這些選定行(但其他會話仍可以讀取行),直到事務完成,此時將鎖定行SELECT SHOCK IN SHARE MODE語句被釋放,所以其他會話可以訪問它們進行寫入/刪除等。
這正是我想要的我的評論表。無論何時將評論添加到我網站上的帖子中,我需要鎖定與該帖子關聯的所有評論行,同時更新所有鎖定行上的某些元數據。如果兩個評論同時提交,我不希望他們同時訪問相關的評論行,因爲他們基本上會互相影響(和元數據)。所以我想將SELECT LOCK IN SHARE MODE合併到註釋上傳腳本中,所以在查詢中運行鎖定的第一個會話將完全控制註釋行,直到它完成整個事務爲止(而稍微慢一點的腳本必須等到來自第一個腳本的整個事務執行)。
我是一個但擔心在腳本A鎖定腳本B需要的數據的情況下創建死鎖,而腳本B鎖定了腳本A需要的數據。我如何在應用程序中解決這個問題?
此外,我只在我的網站數據庫中使用innodb,所以我不需要擔心表鎖正確?
感謝,
Billmalarky