gpt4 book ai didi

mysql - 为什么 INSERT ... ON DUPLICATE KEY UPDATE 影响行报告 2?

转载 作者:行者123 更新时间:2023-11-29 05:47:40 26 4
gpt4 key购买 nike

如果我执行下面的语句:

INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test';

如果 id 列的值存在于数据库中,但 username 的值不同,则报告的受影响行数为 2。更准确地说:

  • 如果新记录是完全重复的,并且没有更新/插入任何内容,则受影响的行为 0
  • 如果id不存在,则插入一条新记录,受影响的行数为1
  • 如果 id 存在,但现有记录已更新,则受影响行的值设置为 2

这是什么原因?这是为了提供发生了什么行动的信息吗?实际上有 2 行受到影响吗?

在 MariaDB 10.3.7 上测试

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(355) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4;

INSERT INTO `users` (`id`, `username`) VALUES (102, 'Some name');

最佳答案

INSERT... ON DUPLICATE KEY UPDATE 执行两个操作。您可以使用将 session 变量设置为副作用的触发器来证明这一点:

mysql> create trigger i before insert on users for each row set @i = true;

mysql> create trigger u before update on users for each row set @u = true;

mysql> INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test';
Query OK, 2 rows affected (0.01 sec)

mysql> select @i, @u;
+------+------+
| @i | @u |
+------+------+
| 1 | 1 |
+------+------+

关于mysql - 为什么 INSERT ... ON DUPLICATE KEY UPDATE 影响行报告 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com