如果将行插入到不包含唯一索引的表中,我将如何防止竞争条件。比如说我的桌子是....
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
...还是有一种更有效的方式逃脱了我?如果我在执行插入后检查重复的行怎么办?如果找到任何行,则回滚事务?
答案 0 :(得分:2)
实际上,您可以在没有key:slot
列的情况下执行此操作。您可以在表上定义唯一的复合键。例如,
ALTER TABLE tableName ADD CONTRAINT tb_uq UNIQUE (`key`, slot)
答案 1 :(得分:1)
如何在插入时使用LOCK TABLES语法来防止竞争条件?