如何在MySQL中停止競爭條件?眼前的問題是由一個簡單的算法造成的:mysql插入競爭條件
- 從表中選擇一行
- ,如果它不存在,將其插入
,然後要麼你得到一個重複行,或如果您通過唯一/主鍵防止出現錯誤。
現在通常我會覺得這裏的交易有所幫助,但由於該行不存在,該交易實際上不利於(或我思念的東西?)。
LOCK TABLE聽起來像是一種矯枉過正,尤其是如果表格每秒更新多次。
唯一的其他解決方案,我能想到的是GET_LOCK()爲每一個不同的ID,但是是不是有更好的辦法?這裏也沒有可擴展性問題嗎?而且,爲每個表做這件事聽起來有點不自然,因爲這聽起來像是高併發性數據庫中一個非常常見的問題。
使用INSERT IGNORE進行操作。觸發器會導致太多開銷,除非業務邏輯複雜,否則它們是不值得的。 – captainspi 2013-06-08 21:30:03
只是`INSERT`有什麼問題,並且有唯一的約束和捕捉錯誤來說「好吧,記錄已經存在」。 – KeatsKelleher 2014-05-22 14:03:11