批量插入记录,遇到重复记录则为自动更新

在插入大量数据时可能同时遇到两个问题:

  1. 如果每条更新执行一次sql性能很低,也容易造成阻塞;

  2. 批量插入时又有可能遇到主键 或者 唯一索引重复的问题,导致整个批量插入失败

使用 ON DUPLICATE KEY UPDATE 一条sql解决批量插入和主键或者唯一索引重复问题

举例如下:

表结构如下:

create table mytable(
id int not null,
code char(6) not null,
description char(50) null,
number int not null,
name char(50) not null,
primary key id,
unique key uk_mytable_code (code));


批量插入如下:

INSERT INTO mytable(id, code, description, number, name) 
VALUES (?,?,?,?,?),(?,?,?,?,?),(?,?,?,?,?)
ON DUPLICATE KEY UPDATE description = VALUES(description), number = VALUES(number)


//description= VALUES (description),number = VALUES(number)  表示出现在 values 中某列的id字段值与表中已有id字段值重复
(或者code的值与表中已有code字段值重复)时,会更新对应已存在记录的 这两个字段
 
//还可以指定其它值或进行运算:number=number+ 1,number=number- 1
 
//因为这里未指定列name, 所以遇到重复id(或者code)列,表中该列的name字段不会更新
 
//如果某列作为新记录被插入,则受影响行的值为1;如果表中原有的记录被更新,则受影响行的值为2


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值