欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-05 15:59:10
复制代码 代码如下:insert table (auto_id, auto_name) values (1, ‘yourname') on duplicate key up...
复制代码 代码如下:

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选项被忽略。