mysql 存在该记录则更新,不存在则插入记录的sql
程序员文章站
2023-12-15 12:08:58
复制代码 代码如下: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选项被忽略。
推荐阅读