sql - 锁定插入件

标签 sql mysql

我有一个非常简单的案例,但我有点困惑。我想插入一条记录,该记录必须是唯一的。因此,如果它存在,我需要替换它或删除并重新插入它。如果它不存在,我需要创建它 - 但需要担心其他人进行检查并同时创建同一个。

任何人都可以推荐关于 MySQL 中锁定的“正确”方法吗?即阻止某人同时做同样的事情?

如果我这样做 - 我将无法防止并发插入具有相同条件的记录:

BEGIN TRANSACTION
SELECT (condtions) FOR UPDATE
if rows exist 
  UPDATE
else
  INSERT
COMMIT

看起来很简单 - 显然对 SQL 非常生疏......

另外:

如果我持有锁,而另一个用户尝试读/写该锁所持有的内容 - 其他用户会收到错误,还是他们的处理会被延迟,直到锁被释放为止?

最佳答案

我相信您正在寻找REPLACE(如果存在,则删除并重新插入)- http://dev.mysql.com/doc/refman/5.1/en/replace.html

或者

insert ... on duplicate key update ... /* does not remove, just update */

关于sql - 锁定插入件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413067/

相关文章:

java - 如何将 mysql SEC_TO_TIME 函数与 jooq 一起使用

具有多个 ROW_NUMBER 或 RANK 的 SQL

PHP - 尽管采用 UTF-8 编码,但字符串未正确显示

sql - 填补缺失数据 Oracle

sql - 加密SQL Server中列中的数据

mysql - 有人用Node.JS更新MySQL吗

SELECT ip 上的 C# MySQL 参数 addwithvalue,estado FROM @table 不起作用

mysql - 如何将日期格式更改为逗号分隔列?

sql - 从两个不同的服务器数据库 INSERT INTO

sql - 需要查询以不同的方式显示数据