1. 程式人生 > >mysql "ON DUPLICATE KEY UPDATE" 語法

mysql "ON DUPLICATE KEY UPDATE" 語法

是實際的開發過程中,可能會遇到這樣的需求,先判斷某一記錄是否存在,如果不存在,新增記錄,如果存在,則修改資料。在INSERT語句末尾指定ON DUPLICATE KEY UPDATE可以解決這類問題。

其用法如下:如果在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引或PRIMARY KEY中出現重複值,則在出現重複值的行執行UPDATE操作,如果不會導致唯一值重複的問題,則執行INSERT操作。

例如:如果欄位id為主鍵或擁有UNIQUE索引,並且包含值1,則以下兩條語句具有相同的效果:

INSERT INTO `user` (id, username, age) VALUES (1, 'jason', 88) ON DUPLICATE KEY UPDATE age = 88;
UPDATE `user` SET age = 88 WHERE id = 1;

如果語句被正確執行,會返回一個影響的行數。如果行作為新記錄被插入,則受影響的行值為1,如果原有的記錄被更新,則受影響的行值為2.

如果INSERT多行記錄。

INSERT INTO `user` (id, username, age)
VALUE
	(3, 'Alex', 18),
	(3, 'Alex', 20) ON DUPLICATE KEY UPDATE age = age + 1;

欄位age的值將會更改為19,因為第二條記錄與第一條重複,所以age的值被更改為19;

INSERT INTO `user` (id, username, age)
VALUE
	(4, 'wang', 22),
	(4, 'wang', 25) ON DUPLICATE KEY UPDATE age = VALUES(age);

欄位age的值將會更改為25,因為第二條記錄的與第一條重複,所以age的直接取重複的值。

注意以上兩條sql語句之間的區別,第一條sql語句,當出現主鍵或索引重複時,修改第一條記錄的值,不會涉及到第二條記錄的值。第二條sql語句,當出現主鍵或索引重複時,取第二條記錄的值。