PHP& MySQL:可以“在重复更新时插入”查询干扰吗?

时间:2017-11-24 08:12:20

标签: 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 { {1}}一次到4?或者这不可能吗?

1 个答案:

答案 0 :(得分:1)

不要将LOCK TABLE与InnoDB一起使用。它基本上没必要。

IODKU找到一行,锁定它,然后执行操作,然后解锁。多个“同时”连接没有问题,除了一个人会等待(很小的时间)让另一个人释放锁。

你所拥有的是“喜欢”(社交媒体)或“点击”(网页)的好桌子。请注意,idPRIMARY KEY,但不是 auto_increment。它与主表(可能有id)相同auto_increment

如果每个有超过数百个喜欢/点击次数,则会出现性能问题。 (但这是另一个讨论。)显然,你还没有。