我有一個非常簡單的情況,我有點困惑。我想插入一條記錄,該記錄必須是唯一的。因此,如果存在,我需要替換它或刪除並重新插入它。如果它不存在,我需要創建它 - 但需要擔心其他人在同一時間執行檢查並創建同一個檢查。鎖定插入
任何人都可以推薦「正確」的方式來做到這一點在鎖定MySQL?即阻止某人同時做同樣的事情?
如果我這樣做 - 我不保護,以防止與相同條件的記錄併發插入:
BEGIN TRANSACTION
SELECT (condtions) FOR UPDATE
if rows exist
UPDATE
else
INSERT
COMMIT
似乎是一個簡單的事情 - 很明顯在SQL生疏......
還:
如果我持有一個鎖,並且另一個用戶試圖讀取/寫入鎖持有的某些內容 - 其他用戶是否會收到錯誤,或者他們的處理是否會延遲,直到鎖被釋放SED?
超!還有一個相關的問題:我的數據庫中的數據是一張地圖 - 因此每個「唯一」記錄(如果存在的話)都有一個X和Y座標。我可以創建一個使用*兩個*字段的表,這些字段必須是唯一的 - 還是需要將這些數字合併到一個值中並將其作爲唯一鍵? – Brad 2010-12-10 20:51:29
當然,這被稱爲自然鑰匙 - http://en.wikipedia.org/wiki/Natural_key作爲替代鑰匙的對面 - http://en.wikipedia.org/wiki/Surrogate_key。優點和缺點可以在SO上找到,也可以在wiki上討論 – ajreal 2010-12-10 21:09:41