2

整数列が一意としてマークされているt1テーブルがあり、それが主キーであると仮定しましょう。次のクエリは失敗しますか?weightitem_id

UPDATE t1
  SET weight = SELECT new_weight FROM (
    SELECT MAX(weight) + 1 AS new_weight FROM t1
  ) qs
WHERE item_id = ?

?引数です。レースのために 2 つのアイテムが同じ重量を設定しようとする可能性はありますか? それとも、そのデータベース エンジン固有のものですか?

4

2 に答える 2

0

2 つのトランザクションが並行して実行される場合に可能です。

両方のトランザクションが に対して同じ値を取得し、MAX(weight)+1この同じ値で更新しようとすると、制約違反が発生します。

于 2012-11-28T13:14:35.210 に答える