如何防止MySQL重复插入数据,这篇文章会告诉你

数据库 MySQL
在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入。代码反复效率低下。

在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入。代码反复效率低下。

新建表格

  1. CREATE TABLE `person`  ( 
  2.   `id` int NOT NULL COMMENT '主键'
  3.   `namevarchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '姓名'
  4.   `age` int NULL DEFAULT NULL COMMENT '年龄'
  5.   `address` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '地址'
  6.   PRIMARY KEY (`id`) USING BTREE 
  7. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic

添加三条数据如下:

 

如何防止MySQL重复插入数据,这篇文章会告诉你

我们这边可以根据插入方式进行规避:

1. insert ignore

insert ignore 会自动忽略数据库已经存在的数据(根据主键或者唯一索引判断),如果没有数据就插入数据,如果有数据就跳过插入这条数据。

  1. 插入SQL如下: 
  2. insert ignore into person (id,name,age,address) values(3,'那谁',23,'甘肃省'),(4,'我的天',25,'浙江省'); 

再次查看数据库就会发现仅插入id为4的数据,由于数据库中存在id为3的数据所以被忽略。

 

如何防止MySQL重复插入数据,这篇文章会告诉你

2. replace into

replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

  1. 插入SQL如下: 
  2. replace into person (id,name,age,address) values(3,'那谁',23,'甘肃省'),(4,'我的天',25,'浙江省'); 

首先我们将表中数据恢复,然后进行插入操作后发现id为3的数据发生了改变同时新增了id为4的数据。

 

如何防止MySQL重复插入数据,这篇文章会告诉你

3. insert on duplicate key update

insert on duplicate key update 如果在insert into语句的末尾指定了on duplicate key update + 字段更新,则会在出现重复数据(根据主键或者唯一索引判断)的时候按照后面字段更新的描述对该信息进行更新操作。

  1. 插入SQL如下: 
  2. insert into person (id,name,age,address) values(3,'那谁',23,'甘肃省'on duplicate key update name='那谁', age=23, address='甘肃省'

首先我们将表中数据恢复,然后在进行插入操作时,发现id为3的数据发生了改变,进行了更新操作。

 

如何防止MySQL重复插入数据,这篇文章会告诉你

我们可以根据自己的业务需求进行方法的选择。

责任编辑:未丽燕 来源: 今日头条
相关推荐

2018-02-08 18:16:39

数据库MySQL锁定机制

2020-07-09 10:21:03

网络排错TCPIP

2023-04-06 11:10:31

闭包JavaScript

2023-12-24 22:42:57

数据库分片中间件

2017-07-05 15:42:58

卷积神经网络Non-Euclide计算机视觉

2017-07-12 16:56:42

卷积神经网络结构数据CNN

2022-08-29 10:08:50

跨集群

2019-01-08 07:43:53

路由器调制解调器

2019-10-31 09:48:53

MySQL数据库事务

2021-11-04 10:34:02

JavaScript继承编程

2022-02-18 00:13:53

JavaScript编程语言数组

2023-11-30 08:27:38

泛化调用架构

2019-01-28 11:24:53

Windows 功能系统

2018-11-30 09:38:18

2017-07-10 13:45:33

自动编码数据生成GAN

2019-07-28 20:15:07

2020-02-21 17:07:08

人生第一份工作大学社交网络

2024-04-12 00:00:00

localhost计算机机制

2019-01-30 13:44:34

JVM内存服务器

2020-02-12 18:55:24

负载因子初始值为什么
点赞
收藏

51CTO技术栈公众号