Mysql 实现批量插入对已存在数据忽略/更新
一. 表的准备
CREATE TABLE `demo` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='demo表';
二. 实现
2.1 实现原理
对已存在的数据进行忽略/更新,需要唯一索引/主键。
唯一索引可为多个字段的联合索引,比如根据我提供的sql中,我需要``name+age`不重复,则可把这2个字段联合创建为唯一索引
创建联合唯一索引的sql
alter table table_name add unique index unique_index_name (field1,field2...);
-
批量插入对已存在数据忽略
insert ignore table_name (field1, field2...) values (value1, value2...),(value1, value2...); -
批量插入对已存在数据更新
replace into table_name (field1, field2...) values (value1, value2...),(value1, value2...);
笔者这里只举例第一种情况的demo
对已存在数据更新情况,读者自行练习
2.2 批量插入对已存在数据忽略
现在我们把name+age创建联合唯一索引
alter table demo add unique index unique_name_age (name,age);
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1VkErW2f-1689071358754)(Mysql 实现批量插入对已存在数据忽略更新.assets/image-20230711181257677.png)]](https://i-blog.csdnimg.cn/blog_migrate/3038be67814c6e86c5365465ae8cdf8f.png)
新增索引后,我们开始批量插入数据
这里我们先制造2条数据,来判断我们批量插入是否能对已存在的数据进行忽略。
INSERT INTO `demo` (`id`, `name`, `age`) VALUES (1, '张三', 10);
INSERT INTO `demo` (`id`, `name`, `age`) VALUES (2, '李四', 10);
我们开始批量插入,对已存在数据进行忽略
insert ignore demo values (null, '张三',10),(null, '小黑',11);
运行过程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWS5eY6x-1689071358755)(Mysql 实现批量插入对已存在数据忽略更新.assets/image-20230711182243200.png)]](https://i-blog.csdnimg.cn/blog_migrate/ef4bb0338893a16f1f024419a3f4bde3.png)
运行结果展示
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qDDThnJf-1689071358755)(Mysql 实现批量插入对已存在数据忽略更新.assets/image-20230711182516342.png)]](https://i-blog.csdnimg.cn/blog_migrate/af59d0e004785de50eea3fd1072fd87c.png)
文章介绍了如何在MySQL中通过创建唯一索引实现批量插入时,对已存在数据进行忽略或更新。首先创建了一个名为`demo`的表,然后通过`ALTERTABLE`添加了`name`和`age`的联合唯一索引。接着,使用`INSERTIGNORE`语句展示了如何忽略已存在的数据进行插入。对于更新操作,读者被鼓励自行实践。
3345

被折叠的 条评论
为什么被折叠?



