Mysql 为什么插入。。。重复密钥更新受影响的行报告2?
如果我执行以下语句:Mysql 为什么插入。。。重复密钥更新受影响的行报告2?,mysql,Mysql,如果我执行以下语句: INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test'; 如果DB中存在列id的值,但username的值不同,则报告的受影响行数为2。更准确地说: 如果新记录完全重复,且未更新/插入任何内容,则受影响的行为0 如果id还不存在,则插入一条新记录,受影响的行为1 如果id存在,但已更新现有记录,则受影响行的值设置为2 这是什么原因?这是为了提
INSERT INTO users(id, username) VALUES(102, 'test') ON DUPLICATE KEY UPDATE username='test';
如果DB中存在列id
的值,但username
的值不同,则报告的受影响行数为2。更准确地说:
- 如果新记录完全重复,且未更新/插入任何内容,则受影响的行为0
- 如果id还不存在,则插入一条新记录,受影响的行为1
- 如果id存在,但已更新现有记录,则受影响行的值设置为2
创建表(如果不存在)`users`(
`id`int(11)非空自动增量,
`用户名'varchar(355)不为空,
主键(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=103默认字符集=utf8mb4;
在'users'('id','username')值中插入(102,'Some name');
插入。。。在重复密钥更新时
执行两个操作。您可以使用将会话变量设置为副作用的触发器来演示这一点:
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 |
+------+------+
insert是受影响行中的第一行,update是第二行,它是否是同一行并不重要。