mysql – INSERT INTO … ON DUPLICATE KEY UPDATE即使行没有改变也会执行?
作者:互联网
让我解释 :
我们假设我们有一个数据库“user”:
ID Name Surname
===================
1 John Doe
2 Foo Bar
3 Foo Baz
现在我想改变所有这三行.我将抛出以下插入内容:
INSERT INTO user (ID, Name, Surname) VALUES (1, 'John', 'Conor') ON DUPLICATE KEY UPDATE ID = 1, Name = 'John', Surname = 'Conor';
INSERT INTO user (ID, Name, Surname) VALUES (2, 'Foo', 'Bar') ON DUPLICATE KEY UPDATE ID = 2, Name = 'Foo', Surname = 'Bar';
INSERT INTO user (ID, Name, Surname) VALUES (3, 'Foo', 'Baz') ON DUPLICATE KEY UPDATE ID = 3, Name = 'Foo', Surname = 'Baz';
题
如果更新前的行是相同的,命令ON DUPLICATE KEY是否会自行执行?意思是,它是否会对ID等于2和3的行执行,即使它不应该执行(因为它没用)?我问这个问题的性能问题.
解决方法:
MySQL执行ON DUPLICATE KEY UPDATE的方式与执行UPDATE语句的方式相同:
它检查要更新的每行(和列)的内容,如果它们与提供的相同,则不会进行任何更新.它仍然需要检查它们.
因此,在您的情况下(您要发送3行插入的地方)的结果将是:
>要插入3行
> 3次关键碰撞
>插入0行
> 3要更新
> 1行实际更新
> 2相同(无更新)
关于语法的一些事情:
>您不需要更新UNIQUE键.
>您可以在UPDATE部分中使用VALUES(列).
>您可以将多个插入组合成一个:
INSERT INTO user
(ID, Name, Surname)
VALUES
(1, 'John', 'Conor'),
(2, 'Foo', 'Bar'),
(3, 'Foo', 'Baz')
ON DUPLICATE KEY UPDATE
Name = VALUES(Name),
Surname = VALUES(Surname) ;
标签:mysql,insert,duplication,update 来源: https://codeday.me/bug/20190806/1601958.html