背景#
タイトルは実際には SQL ステートメントであり、今日この SQL に遭遇したので、この SQL の特徴と注意すべき問題、問題に遭遇した後の理解をより深くするために記録しておきます...
语法含义#
SQL ステートメントの文字通りの意味は、1 つのデータを挿入し、列フィールドが xx の場合に一部のフィールドを更新することです。
たとえば、ショッピングモールシステムでは、注文テーブル order が注文 ID を 1123 として識別するとき、注文の名前情報を更新する SQL ステートメントは次のようになります:
insert order on order_id = 1123 update order_name = xxx
注文 ID は一意のインデックスであり、これにより、一意のインデックス列の重複による注文の挿入失敗を回避し、データの競合を回避できます。そして、on の後の列が一意のインデックスでない場合、複数のスレッドがアクセスする場合、重複したデータが発生し、競合問題が発生します。
应用场景#
前述のように、適用シーンは、主に一意のインデックスフィールド列を持つ並行シーンであり、競合問題を解決できます。
场景比较#
分散ロックも競合問題を解決できますが、両者の違いは次のとおりです:
- 分散ロックは Redis に基づいて実装されており、ロックの時間を選択しないとシステムの負荷に影響を与える可能性がありますが、MySQL に基づいている場合はそうではありません。