我有一个非常简单的案例,但我有点困惑。我想插入一条记录,该记录必须是唯一的。因此,如果它存在,我需要替换它或删除并重新插入它。如果它不存在,我需要创建它 - 但需要担心其他人进行检查并同时创建同一个。
任何人都可以推荐关于 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/