首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么插入..。在重复键更新受影响的行报告2?

为什么插入..。在重复键更新受影响的行报告2?
EN

Stack Overflow用户
提问于 2019-10-03 22:52:42
回答 1查看 240关注 0票数 1

如果我执行以下语句:

代码语言:javascript
复制
INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test';

如果列id的值存在于DB中,但username的值不同,那么报告的受影响行数为2。

如果新记录是完全重复的,并且没有更新/插入任何内容,则如果id尚不存在,受影响的行为0

  • ,则插入新记录,如果存在id,受影响的行为1
  • ,但现有记录被更新后,受影响行的值被设置为2

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

在MariaDB 10.3.7上测试

代码语言:javascript
复制
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');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 23:32:03

INSERT... ON DUPLICATE KEY UPDATE执行两个操作。您可以使用触发器演示这一点,这些触发器将会话变量设置为副作用:

代码语言:javascript
复制
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 |
+------+------+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58227850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档