背景#
標題其實是一個 sql 語句,今天遇到了這個 sql,特此記錄下這個 sql 的特點,以及要注意的問題,遇到問題後記錄會理解的更加深刻...
語法含義#
sql 語句字面的含義就是插入一條數據,當一個列字段等於 xx 的時候,更新某些字段。舉例來說,在商城系統中,有一張訂單表 order 根據訂單 id 標識為 1123 的時候,更新訂單的名稱信息,轉化為 sql 語句的後為:
insert order on order_id = 1123 update order_name = xxx
訂單的 id 為唯一索引,這樣插入可以避免出現唯一索引列重複,導致訂單插入失敗的情況,從而可以避免數據衝突。然後如果 on 後面的一列不是唯一索引,則在多線程的情況下,如果有多個線程進行訪問,就會出現重複的數據,產生並發的問題。
應用場景#
如上文所說,應用的場景主要是並發的場景下,有唯一索引的字段列,可以解決並發問題。
場景比較#
分佈式鎖也可以解決並發問題,兩者比較區別如下:
- 分佈式鎖是基於 redis 實現,鎖的時間,如果選擇不當會影響系統的負載,而基於 mysql 就不會。