2

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

我解决这个问题的第一个想法是锁定表,但不幸的是你不能LOCK TABLE在存储过程中发出。

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

任何锁定表格或替代解决方案的方法?

4

2 回答 2

2

您可以使用

insert into ... on duplicate key

查看示例@thummper 答案:

在重复键忽略?

于 2011-09-06T09:37:57.307 回答
0

另一种选择是使用

INSERT IGNORE INTO ... 

并且只要您有一个唯一的密钥,该插入发生两次就会违反,它就不会再次执行。

于 2012-09-22T14:25:40.363 回答