给定一个这样的表:
id | counter
1 | 3
(字段 id
是主要字段)和以下查询:
$sql = 'INSERT INTO `test`(`id`, `counter`) VALUES (1,1)
ON DUPLICATE KEY UPDATE counter= counter+1'
$db->query($sql);
是否有可能两个不同的用户从服务器执行此脚本,并且计数器仅更新为 4
而不是 5
,因为它们是在同时将 3
立即增加到 4
?或者这是不可能的?
最佳答案
不要将LOCK TABLE
与InnoDB一起使用。这本质上是没有必要的。
IODKU 定位一行,锁定它,然后执行操作,然后解锁。多个“同时”连接没有问题,只是一个连接会等待(极短时间)另一个连接释放锁。
您拥有的是一个很好的“喜欢”(社交媒体)或“点击”(网页)表格。请注意,id
是PRIMARY KEY
,但不是auto_increment
。它与主表的 id
相同(可能具有 auto_increment
)。
如果每秒的点赞/点击次数超过数百次,就会出现性能问题。 (但那是另一个讨论了。)显然,你还没有做到这一点。
关于PHP 和 MySQL : Can 'insert on duplicate update' queries interfere?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47468921/