INSERT如何防止竞争?

时间:2013-02-28 03:59:37

标签: mysql sql pdo innodb race-condition

如果将行插入到不包含唯一索引的表中,我将如何防止竞争条件。比如说我的桌子是....

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

...还是有一种更有效的方式逃脱了我?如果我在执行插入后检查重复的行怎么办?如果找到任何行,则回滚事务?

2 个答案:

答案 0 :(得分:2)

实际上,您可以在没有key:slot列的情况下执行此操作。您可以在表上定义唯一的复合键。例如,

ALTER TABLE tableName ADD CONTRAINT tb_uq UNIQUE (`key`, slot)

答案 1 :(得分:1)

如何在插入时使用LOCK TABLES语法来防止竞争条件?