我有一个php脚本,用于检查表中的特定唯一条目。如果该条目不存在,则为该数据创建一个新行,否则它只更新该条目的计数。我的脚本可以同时被击中(同一秒)。在这种情况下,脚本的两个实例一起检查并且找不到条目并尝试插入记录。在这种情况下,第二个实例会引发错误。
有没有办法防止这种情况发生。
使用this question中提到的方法会有帮助吗?
答案 0 :(得分:3)
你必须
LOCK TABLES ...
)UNLOCK TABLES
)答案 1 :(得分:0)
MySQL支持“REPLACE”操作,该操作将删除现有行并重新创建它(可能不是您正在查找的内容):http://dev.mysql.com/doc/refman/5.0/en/replace.html
你真正想要的是“插入...重复主题更新”:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
他们在该页面上的第一个例子似乎就是你所描述的:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
当INSERT导致主键或唯一键发生冲突,然后作为UPDATE运行时,它会起作用。
答案 2 :(得分:0)
为什么不继续INSERT并期待1022重复键错误?