您的位置:首页 > 数据库 > MySQL

mysql"ON DUPLICATE KEY UPDATE"的用法

2013-03-19 19:44 363 查看
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题则插入。
例如,如果列 a 为主键或拥有UNIQUE索引,值为1,以下语句具有相同效果:

INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;


如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。

其他用法:
如果INSERT多行记录(假设 a 为主键或 a 是UNIQUE索引):

INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;


执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1)。

INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);


执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7)。
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
该语法适合用在需要判断记录是否存在,若不存在则插入,存在则更新的场景。

实例:

'''第一次执行
mysql> INSERT INTO Tbl_AdUser (FUId,FAdPrdId,FStatus,FUName,FTargetType,FCreatedTime,FIndustry,FComeFrom) VALUES(115399076,1,1,'企业',25,1351650732,2,1) ON DUPLICATE KEY UPDATE FAdPrdId=1,FStatus=1,FUName='企业',FTargetType=25,FCreatedTime=1351650732,FIndustry=2,FComeFrom=1;
Query OK, 1 row affected, 2 warnings (0.00 sec)
'''第二次执行
mysql> INSERT INTO Tbl_AdUser (FUId,FAdPrdId,FStatus,FUName,FTargetType,FCreatedTime,FIndustry,FComeFrom) VALUES(115399076,1,1,'企业',25,1351650732,2,1) ON DUPLICATE KEY UPDATE FAdPrdId=1,FStatus=1,FUName='企业',FTargetType=25,FCreatedTime=1351650732,FIndustry=2,FComeFrom=1;
Query OK, 2 rows affected, 2 warnings (0.00 sec)


http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: