0

一意のインデックスを含まないテーブルに行を挿入するときに競合状態を防ぐにはどうすればよいですか。たとえば、私のテーブルが....だとします。

key | slot | label
------------------
 1  |  1   | some
 1  |  2   | some
 2  |  1   | some
 2  |  2   | some

... このような競合状態を防止して、"key:slot" などの複合一意フィールドを作成する唯一の方法です。

id  | key | slot | label
------------------------
1:1 |  1  |  1   | some
1:2 |  1  |  2   | some
2:1 |  2  |  1   | some
2:2 |  2  |  2   | some

...または、私を逃れたより効率的な方法はありますか? 挿入が実行された後に重複行をチェックし、見つかった場合はトランザクションをロールバックするとどうなりますか?

4

2 に答える 2

2

実際には、key:slot列なしでそれを行うことができます。テーブルに一意の複合キーを定義できます。例えば、

ALTER TABLE tableName ADD CONTRAINT tb_uq UNIQUE (`key`, slot)
于 2013-02-28T04:02:19.973 に答える
1

挿入時の競合状態を防ぐためにLOCK TABLES構文を使用するのはどうですか?

于 2013-02-28T04:04:12.127 に答える