顾乔芝士网

持续更新的前后端开发技术栈

还在为重复数据头疼?MySQL 的 INSERT IGNORE 藏着大招!

家人们,今天来唠个 MySQL 里超实用但好多人不知道的小技巧 ——INSERT IGNORE!

别看它名字平平无奇,关键时刻能帮你省去超多麻烦,尤其对付那些重复数据插入的场景,简直是救星!

这玩意儿到底是啥?

简单说,INSERT IGNORE就是在插入数据时,要是遇到主键或唯一索引冲突(比如要插的记录主键已经存在),它不会报错炸锅,而是默默忽略这条有问题的记录,继续插后面的数据。

是不是听起来就很贴心?

举个栗子秒懂

假设咱们有个user表,id是主键,还建了个username的唯一索引(不能有重名用户):

id

username

age

1

张三

25

2

李四

30

现在想批量插入几条数据,其中可能有重复的:

-- 普通INSERT会报错
INSERT INTO user (id, username, age) 
VALUES (2, '李四', 31), (3, '王五', 28);

普通INSERT遇到id=2的记录会直接报错 “主键冲突”,后面的王五也插不进去了。

换成INSERT IGNORE试试:

INSERT IGNORE INTO user (id, username, age) 
VALUES (2, '李四', 31), (3, '王五', 28);

它会跳过李四那条冲突记录,成功插入王五,数据库安安静静不报错,简直不要太丝滑!

优点简直不要太香

  • 不中断批量操作:就算有几条数据冲突,也不影响其他正常数据插入,批量处理时超省心。
  • 减少代码判断:不用在代码里先查一遍有没有重复再决定插不插,省了好几行代码,效率 up up!
  • 避免报错雪崩:在高并发插入场景,不会因为一条重复数据就让整个事务崩掉,稳定性拉满。

但这些坑你得避开!

  • “忽略” 可能藏隐患:它会默默跳过冲突数据,要是你没注意,可能以为所有数据都插成功了,结果漏了几条都不知道。所以用了之后最好查下受影响行数哦。
  • 只认主键和唯一索引:如果冲突不是因为这俩,比如违反了非空约束,它该报错还是会报错,别指望它啥都能忽略。
  • 别乱用自增主键:如果表用了自增主键,就算插入被忽略,自增 ID 还是会增加,可能导致 ID 不连续,有强迫症的小伙伴要注意啦。

怎么样,这个INSERT IGNORE是不是有点东西?

你们平时处理重复数据都是用啥方法?有没有踩过不用它的坑?

快来评论区聊聊,让我康康大家的骚操作!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言