PHP&;MySQL:Can';在重复更新时插入';询问会干扰吗?
给出这样一张表:PHP&;MySQL:Can';在重复更新时插入';询问会干扰吗?,php,mysql,innodb,Php,Mysql,Innodb,给出这样一张表: 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?或者这是不可能的 不要
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
?或者这是不可能的 不要将锁表
与InnoDB一起使用。这基本上是没有必要的
IODKU定位一行,锁定它,然后执行操作,然后解锁。多个“同时”连接没有问题,只是其中一个会等待(很短的时间)另一个释放锁
你拥有的是一个很好的“喜欢”(社交媒体)或“点击”(网页)表格。请注意,id
是主键
,但不是自动增量
。它与主表的id相同(可能具有自动增量)
如果每秒有数百次以上的喜欢/点击,则会出现性能问题。(但这是另一个讨论。)显然,您还没有做到。使用lock table@Fky,所以您说它们可能会相互干扰?是的,如果使用两个不同的sessionid执行脚本,可能会有麻烦,所以我建议在执行请求并在结束时释放请求时,使用lock table来禁止表上的其他操作