PHP 和 MySQL : Can 'insert on duplicate update' queries interfere?

标签 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?或者这是不可能的?

最佳答案

不要将LOCK TABLE与InnoDB一起使用。这本质上是没有必要的。

IODKU 定位一行,锁定它,然后执行操作,然后解锁。多个“同时”连接没有问题,只是一个连接会等待(极短时间)另一个连接释放锁。

您拥有的是一个很好的“喜欢”(社交媒体)或“点击”(网页)表格。请注意,idPRIMARY KEY,但不是auto_increment。它与主表的 id 相同(可能具有 auto_increment)。

如果每秒的点赞/点击次数超过数百次,就会出现性能问题。 (但那是另一个讨论了。)显然,你还没有做到这一点。

关于PHP 和 MySQL : Can 'insert on duplicate update' queries interfere?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47468921/

相关文章:

python - 将id值存储在字典中还是重新查询数据库是否更有效

mysql - 在 InnoDB 中定义关系时的 CASCADE

php - 为什么 TRANSACTION/COMMIT 使用 PHP/MySQL (InnoDB) 提高了性能?

php - 当 3 列的值匹配时 ON DUPLICATE KEY 更新

php - 用户提交代码演示区的安全预防措施和技术

mysql - mysql如何比较和求和单个表中的不同列

Mysql - 如何设置自增从零开始

mysql - 设置了只读的从属服务器上存储过程中的临时表

PHP 在 CentOS 上的性能很差

php - 检查mysqli查询是否成功的正确方法