Mysql 实现批量插入对已存在数据忽略或更新

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)]

新增索引后,我们开始批量插入数据

这里我们先制造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)]

运行结果展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qDDThnJf-1689071358755)(Mysql 实现批量插入对已存在数据忽略更新.assets/image-20230711182516342.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值