MySQL插入数据遇到唯一键已存在怎么办?

MySQL中插入数据,如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert ignore 语法可以忽略插入重复的数据。

1、insert ignore 语法

insert ignore into table_name values...

使用insert ignore语法插入数据时,如果发生主键或者唯一键冲突,则忽略这条插入的数据。

满足以下条件之一:

  • 主键重复
  • 唯一键重复

2、insert ignore 案例

先看一张表,表名table_name,主键id,唯一键name,具体表结构及表中数据如下:

复制代码
 CREATE TABLE table_name(
  id int(11) NOT NULL,
  name varchar(50) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uk_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> select * from table_name;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Tom  |   20 |
+----+------+------+

2.1 主键冲突

插入一条记录,id为1,如果不加 ignore ,报主键冲突的错误,如下:

mysql> insert into table_name values(1,'Bill', 21);

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

加上ignore之后,不会报错,但有一个warning警告,如下:

复制代码
mysql> **insert ignore into table_name values(1,'Bill', 21);**
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+---------------------------------------+
| Level  | Code | Message                |
+---------+------+---------------------------------------+
| Warning | 1062 | Duplicate entry '1' for key 'PRIMARY' |
+---------+------+---------------------------------------+

查询表,发现插入的数据被忽略了。
mysql> select * from table_name;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | Tom |  20 |
+----+------+------+

2.2 唯一键冲突

同样,插入唯一键冲突的数据也会忽略,如下所示:

复制代码
mysql> **insert into table_name values(2,'Tom',21);**
ERROR 1062 (23000): Duplicate entry 'Tom' for key 'uk_name'

mysql> **insert ignore into table_name values(2,'Tom',21);**
Query OK, 0 rows affected, 1 warning (0.00 sec)

如果业务逻辑需要插入重复数据时自动忽略,不妨试试MySQL 的 insert ignore 功能。

相关推荐
bksczm34 分钟前
MySQL之存储引擎
数据库·mysql
橙光成长1 小时前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
计算机毕设定制辅导-无忧学长1 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
深圳雨林凯AI1 小时前
图案裂变的底色衰减:alpha通道、亮度对比与白墨分色的量化拆解
android
大模型最新论文速读1 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql
mmsx1 小时前
Android 模块化收口:能力组合框架、手写 LifecycleOwner 与热修复共存
android
ManageEngineITSM2 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
ClouGence2 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
TDengine (老段)2 小时前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
Decay__2 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构