INSERT INTO .. ON DUPLICATE KEY用法

来源:互联网 发布:nodejs调用java api 编辑:程序博客网 时间:2024/05/06 12:51

INSERT INTO .. ON DUPLICATE KEY用法


摘要:当在 insert 语句末尾指定了 on duplicate key update 语句时,如果新插入的新数据中 a列 的值已经在数据库中存在,则会执行后面的 update 语句,这时相当于执行了下面语句...
转载请注明来源:INSERT INTO .. ON DUPLICATE KEY用法
今天有人问用过mysql INSERT INTO .. ON DUPLICATE KEY吗?

自己还真没有用过这个东东,在网络上搜索了下这个东东是什么...

我们先来看条SQL语句:

INSERT INTO TableName(a,b,c) VALUES(1,2,3)ON DUPLICATE KEYUPDATE c=c+1;
下面来解释下这条代码是什么意思:


假设上面语句中字段a的属性为唯一unique

当在 insert 语句末尾指定了 on duplicate key update 语句时,如果新插入的新数据中 a列 的值已经在数据库中存在,则会执行后面的 update 语句,这时相当于执行了下面语句:

UPDATE TableName SET c=c+1 WHERE a=1;
反之,则执行正常的 insert 语句。


这里需要注意的是:如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。

参考资料:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

下面来看一下同时插入多行记录的情况:

字段a被定义为UNIQUE,并且原数据库表table中已存在记录(2,2,9)和(3,2,1),如果插入记录的a值与原有记录重复,则更新原有记录,否则插入新行:

INSERT INTO TABLE (a,b,c) VALUES (1,2,3),(2,5,7),(3,3,6),(4,8,2)ON DUPLICATE KEY UPDATE b=VALUES(b);
以上SQL语句的执行,发现(2,5,7)中的a与原有记录(2,2,9)发生唯一值冲突,则执行ON DUPLICATE KEY UPDATE,将原有记录(2,2,9)更新成(2,5,9),将(3,2,1)更新成(3,3,1),插入新记录(1,2,3)和(4,8,2)

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法! 转载请注明来源:INSERT INTO .. ON DUPLICATE KEY用法
http://www.php1.cn/Content/INSERTINTO--ONDUPLICATEKEY_YongFa.html
0 0
原创粉丝点击