MySQL替代存储过程中的“锁定表”

时间:2011-09-06 09:07:35

标签: mysql table-lock

如果行尚不存在,我需要在表中插入一行,并且我需要使用存储过程来执行此操作。因此,我需要选择检查行是否已存在,然后是插入。我想避免的是竞争条件,其中存储过程的2个调用者可能会看到该行不存在,然后两者都尝试插入该行。

我对解决此问题的第一个想法是锁定表格,但遗憾的是,您无法在存储过程中发出LOCK TABLE

我想避免在客户端(C#)捕获重复的密钥插入异常。

是否可以锁定表格或其他解决方案?

2 个答案:

答案 0 :(得分:2)

你可以使用

insert into ... on duplicate key

查看示例@thummper回答:

On duplicate key ignore?

答案 1 :(得分:0)

另一种选择是使用

INSERT IGNORE INTO ... 

只要你有一个唯一的密钥,这个插件会发生两次违反,就不会再次进行了。