banner
sink zhang

sink zhang

插入...在重複鍵時更新

photo_2023-04-20_23-14-59.jpg

背景#

標題其實是一個 sql 語句,今天遇到了這個 sql,特此記錄下這個 sql 的特點,以及要注意的問題,遇到問題後記錄會理解的更加深刻...

語法含義#

sql 語句字面的含義就是插入一條數據,當一個列字段等於 xx 的時候,更新某些字段。舉例來說,在商城系統中,有一張訂單表 order 根據訂單 id 標識為 1123 的時候,更新訂單的名稱信息,轉化為 sql 語句的後為:

insert order on order_id = 1123 update order_name = xxx

訂單的 id 為唯一索引,這樣插入可以避免出現唯一索引列重複,導致訂單插入失敗的情況,從而可以避免數據衝突。然後如果 on 後面的一列不是唯一索引,則在多線程的情況下,如果有多個線程進行訪問,就會出現重複的數據,產生並發的問題。

應用場景#

如上文所說,應用的場景主要是並發的場景下,有唯一索引的字段列,可以解決並發問題。

場景比較#

分佈式鎖也可以解決並發問題,兩者比較區別如下:

  1. 分佈式鎖是基於 redis 實現,鎖的時間,如果選擇不當會影響系統的負載,而基於 mysql 就不會。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。