给出一个这样的表:
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
?或者这不可能吗?
答案 0 :(得分:1)
不要将LOCK TABLE
与InnoDB一起使用。它基本上没必要。
IODKU找到一行,锁定它,然后执行操作,然后解锁。多个“同时”连接没有问题,除了一个人会等待(很小的时间)让另一个人释放锁。
你所拥有的是“喜欢”(社交媒体)或“点击”(网页)的好桌子。请注意,id
是PRIMARY KEY
,但不是 auto_increment
。它与主表(可能有id
)相同auto_increment
。
如果每个秒有超过数百个喜欢/点击次数,则会出现性能问题。 (但这是另一个讨论。)显然,你还没有。