Mysql
即使行沒有更改,INSERT INTO … ON DUPLICATE KEY UPDATE 也會執行嗎?
讓我解釋 :
讓我們假設我們有一個數據庫“使用者”:
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
密鑰。- 您可以
VALUES(column)
在UPDATE
零件中使用。- 您可以將多個插入合併為一個:
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) ;