"ON DUPLICATE KEY UPDATE"是MySQL的语法,当尝试插入的行导致一个duplicate key错误(如果该行中存在一个unique索引或primary key,并且该索引或primary key在表中已经存在),则执行UPDATE。
使用基本的SQL语句:
## 在这个例子中,如果在table_name表中存在a或b的重复值,那么执行UPDATE语句,将c的值增加1。
INSERT INTO table_name (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
使用变量:
## 在这个例子中,如果在table_name表中存在a或b的重复值,那么执行UPDATE语句,将c的值增加1。
SET @a=1;
SET @b=2;
SET @c=3;
INSERT INTO table_name (a,b,c) VALUES (@a,@b,@c)
ON DUPLICATE KEY UPDATE c=c+1;
使用CASE语句:
## 在这个例子中,如果在table_name表中存在a或b的重复值,那么执行UPDATE语句,
## 如果a等于10,则将c的值增加10;如果b等于20,则将c的值增加20;否则,将c的值增加1。
INSERT INTO table_name (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c= CASE WHEN a=10 THEN c+10 WHEN b=20 THEN c+20 ELSE c+1 END;
使用函数:
## 在这个例子中,如果在table_name表中存在a或b的重复值,那么执行UPDATE语句,将c的值更新为c-1的绝对值。
INSERT INTO table_name (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c= ABS(c-1);
注意:
ON DUPLICATE KEY UPDATE只是MySQL的语法,不是SQL标准语法,所以在使用时请注意兼容性问题。