如果沒有本機支持,如何在 MySQL 中實現樂觀鎖?

Mary-Kate Olsen
發布: 2024-10-29 21:53:02
原創
687 人瀏覽過

How Can You Implement Optimistic Locking in MySQL Without Native Support?

MySQL 中的樂觀鎖:仔細觀察

本機不支援樂觀鎖定,一種用於管理資料庫中並發更新的技術由MySQL 提供。不過,它可以透過資料庫實踐和應用程式程式碼的結合來實現。

樂觀鎖的工作原理

樂觀鎖背後的原則是假設資料不會並發更新期間發生衝突。透過在更新之前檢查資料完整性,它可以檢測衝突並允許採取適當的操作。

在沒有交易的情況下,透過在 UPDATE 之前包含額外的 SELECT 語句來套用樂觀鎖定。此 SELECT 語句會擷取資料的目前狀態,然後將其與嘗試更新之前的狀態進行比較。如果資料發生更改,則中止更新,從而保持資料完整性。

在MySQL 中使用樂觀鎖

要在MySQL 中實現樂觀鎖,可以執行以下步驟:在應用程式程式碼中執行:

  1. 執行SELECT 語句以擷取資料的目前狀態。
  2. 對資料執行計算或其他操作。
  3. 執行 UPDATE使用樂觀鎖定條件更新資料的語句(例如,WHERE COLUMN_NAME = @OLD_VALUE)。
  4. 檢查 UPDATE 語句後受影響的行數。如果為 0,則資料已更改,表示有衝突,可以中止更新。

範例

考慮以下範例:

<code class="sql">SELECT val1, val2 FROM theTable WHERE iD = @theId;

-- Perform data calculations

UPDATE theTable
SET val1 = @newVal1,
    val2 = @newVal2
WHERE iD = @theId
AND val1 = @oldVal1
AND val2 = @oldVal2;

-- Check the number of affected rows
IF @@ROWCOUNT = 1
-- Update successful
ELSE
-- Conflict detected
END</code>
登入後複製

其他樂觀鎖定方法

其他樂觀鎖定方法

其他樂觀鎖定方法

其他樂觀鎖定方法除了SELECT-UPDATE-CHECK 方法之外,樂觀鎖定還可以使用版本列來實現。每次更新資料時,該列都會遞增,且 UPDATE 語句會在更新行之前檢查版本。如果版本不匹配,則中止更新。 注意事項樂觀鎖定假設衝突很少見,且偵測衝突的成本低於使用悲觀鎖定鎖定(例如,透過交易)。不過,它可能不太適合併發量較高且資料完整性至關重要的場景。

以上是如果沒有本機支持,如何在 MySQL 中實現樂觀鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板