百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 防止重复插入记录sql实现方法
分享文章到:

防止重复插入记录sql实现方法

发布时间:01/15 来源: 浏览: 关键词:

replace语法

replace的语法格式为:

1. replace into table_name(col_name, ...) values(...)

2. replace into table_name(col_name, ...) select ...

3. replace into table_name set col_name=value, ...

算法说明:

replace的运行与insert很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:

1.    尝试把新行插入到表中

2.    当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:

         从表中删除含有重复关键字值的冲突行

        再次尝试把新行插入到表中

旧记录与新记录有相同的值的判断标准就是:表有一个primary key或unique索引,否则,使用一个replace语句没有意义。

该语句会与insert相同,因为没有索引被用于确定是否新行复制了其它的行。

返回值:

not exists

示例一:插入多条记录
假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:
代码如下:

insert into clients
(client_id, client_name, client_type)
select supplier_id, supplier_name, 'advertising'
from suppliers
where not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

示例一:插入单条记录
代码如下:

insert into clients
(client_id, client_name, client_type)
select 10345, 'ibm', 'advertising'
from dual
where not exists (select * from clients
where clients.client_id = 10345);


on duplicate key update

如‍上所写,你也可以在insert into.....后面加上 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选项被忽略。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有12人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板