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

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

文章目录

  • Mysql 实现批量插入对已存在数据忽略/更新
  • 一. 表的准备
  • 二. 实现
    • 2.1 实现原理
    • 2.2 批量插入对已存在数据忽略

一. 表的准备

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

Mysql 实现批量插入对已存在数据忽略或更新_第1张图片

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

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

运行过程

Mysql 实现批量插入对已存在数据忽略或更新_第2张图片

运行结果展示

Mysql 实现批量插入对已存在数据忽略或更新_第3张图片

你可能感兴趣的:(mysql,数据库)