樂觀鎖是並發控制中使用的一種做法,用於防止多個使用者同時更新相同的資料。與悲觀鎖不同,悲觀鎖假設衝突會發生,並在事務開始時鎖定數據,而樂觀鎖則假設衝突很少發生,並允許在不鎖定的情況下進行更新。
MySQL 確實本身並沒有樂觀鎖定。但是,它可以使用標準SQL 指令和版本列方法來實現:
<code class="sql">CREATE TABLE theTable ( id INT NOT NULL AUTO_INCREMENT, val1 INT NOT NULL, val2 INT NOT NULL, version INT NOT NULL DEFAULT 0 );</code>
樂觀鎖定查詢:
<code class="sql">UPDATE theTable SET val1 = @newVal1, val2 = @newVal2, version = version + 1 WHERE id = @id AND version = @oldVersion;</code>
檢查衝突:
更新後,檢查AffectedRows 值:
事務隔離等級在樂觀鎖中發揮作用。在 READ_COMMITTED 隔離等級下,其他程序無法讀取未提交的更新,從而防止衝突發生。
樂觀鎖適合更新不頻繁、衝突機率較低的情況。它通常用於 Web 應用程序,其中較短的用戶會話會降低並發更新的可能性。
以上是如何在 MySQL 中實現樂觀鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!