MySQL存储过程中 "Lock Table"的替代方案

标签 mysql table-lock

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

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

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

有什么方法可以锁定表格或其他解决方案?

最佳答案

你可以使用

insert into ... on duplicate key

查看示例@thumpper 的回答:

On duplicate key ignore?

关于MySQL存储过程中 "Lock Table"的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317449/

相关文章:

mysql - 如何将带引号的字符串插入到 Perl DBI 查询中?

mysql - (MySQL 5.7.19 AWS RDS)如何在不加锁的情况下更改表列字符集

mysql - 简单插入期间innodb全表锁

mysql - 将数据库标准化为 3NF

c# - 表锁抛出异常 vs 表锁等待结束

php - 当表先前被锁定时是否可以使用 PDO lastInsertId() ?

php - mysql 锁定问题

mysql - 为什么 "M"出现在Clojure MySQL查询结果中

php - 试图从我的投票表中获取所有选票的总和,但出现错误

PHP错误问题(搜索)