当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql 存在该记录则更新,不存在则插入记录的sql

mysql 存在该记录则更新,不存在则插入记录的sql

2017年12月12日  | 移动技术网IT编程  | 我要评论
复制代码 代码如下:

insert table (auto_id, auto_name) values (1, ‘yourname') on duplicate key update auto_name='yourname'


on duplicate key update的使用
如果您指定了on duplicate key update,并且插入行后会导致在一个unique索引或primary key中出现重复值,则执行旧行update。例如,如果列a被定义为unique,并且包含值1,则以下两个语句具有相同的效果:
复制代码 代码如下:

mysql> insert into table (a,b,c) values (1,2,3)
-> on duplicate key update c=c+1;
mysql> update table set c=c+1 where a=1;

如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
注释:如果列b也是唯一列,则insert与此update语句相当:
复制代码 代码如下:

mysql> update table set c=c+1 where a=1 or b=2 limit 1;

如果a=1 or b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用on duplicate key子句。
您可以在update子句中使用values(col_name)函数从insert...update语句的insert部分引用列值。换句话说,如果没有发生重复关键字冲突,则update子句中的values(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。values()函数只在insert...update语句中有意义,其它时候会返回null。
示例:
复制代码 代码如下:

mysql> insert into table (a,b,c) values (1,2,3),(4,5,6)
-> on duplicate key update c=values(a)+values(b);

本语句与以下两个语句作用相同:
复制代码 代码如下:

mysql> insert into table (a,b,c) values (1,2,3)
-> on duplicate key update c=3;
mysql> insert into table (a,b,c) values (4,5,6)
-> on duplicate key update c=9;

当您使用on duplicate key update时,delayed选项被忽略。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网