mysql 批量插入, 如果重复自动更新

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

  2. 批量更新时又有可能遇到主键重复的问题

使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键)

1

2

3

4

5

6

7

8

9

10

INSERT INTO  mytable(id,pid,ele,anim) VALUES (?,?,?,?),(?,?,?,?),(?,?,?,?)

ON DUPLICATE KEY UPDATE pid=VALUES(pid),ele=VALUES(ele)

//pid=VALUES(pid),ele=VALUES(ele) 表示出现在values中某列的id字段值与表中已有id字段值重复时,会更新对应记录的这两个字段

//还可以指定其它值或进行运算:pid=pid+1,ele=ele-1

//因为这里未指定列 anim,所以遇到重复id的列,表中该列的 anim字段不会更新

//如果某列作为新记录被插入,则受影响行的值为1;如果表中原有的记录被更新,则受影响行的值为2

它不但对唯一主键有效,对复合主键同样有效,复合主键设置:

1

ALTER TABLE mytable ADD(CONSTRAINT PRIMARY KEY(id,pid));

不过ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法

如果数据已有则更新,发现 MySQL 已经提供了两种解决方法:

ON DUPLICATE KEY UPDATE

这个方法就是在 Insert 语句的时候,加上这个语句,如果数据库里面已有则更新。比如:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

我们还可以在 UPDATE 子句中使用 VALUES(col_name )函数从 INSERT 部分引用列值:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

插入多行情况:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

REPLACE INTO

REPLACE INTO 则会先删除数据,然后再插入。

REPLACE INTO table (a,b,c) VALUES (1,2,3);
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值