如果我执行以下语句:
INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test';如果列id的值存在于DB中,但username的值不同,那么报告的受影响行数为2。
如果新记录是完全重复的,并且没有更新/插入任何内容,则如果id尚不存在,受影响的行为0
。
原因是什么?这是为了提供有关所采取的行动的信息吗?实际上有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');发布于 2019-10-03 23:32:03
INSERT... ON DUPLICATE KEY UPDATE执行两个操作。您可以使用触发器演示这一点,这些触发器将会话变量设置为副作用:
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 |
+------+------+https://stackoverflow.com/questions/58227850
复制相似问题