Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP&;MySQL:Can';在重复更新时插入';询问会干扰吗?_Php_Mysql_Innodb - Fatal编程技术网

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来禁止表上的其他操作