MySQL中的insert ignore into使用

 更新时间:2022年08月18日 10:37:20   作者:一缕阳光a  
这篇文章主要介绍了MySQL中的insert ignore into使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MySQL中的insert ignore into

最近工作中,使用到了insert ignore into语法,感觉这个语法还是挺有用的,就记录下来做个总结。

  • insert ignore into : 忽略重复的记录,直接插入数据。

包括两种场景:

1、插入的数据是主键冲突时

insert ignore into会给出warnings,show warnings就可以看到提示主键冲突;

[test]> create table tt(c1 int primary key, c2 varchar(50))engine = xx;
Query OK, 0 rows affected (0.21 sec)
 
[test]> insert into tt values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
[test]> select * from tt;
+----+------+
| c1 | c2   |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
|  3 | ccc  |
+----+------+
3 rows in set (0.01 sec)
 
[test]> 
[test]> insert ignore into tt values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 0 rows affected, 3 warnings (0.01 sec)
Records: 3  Duplicates: 3  Warnings: 3
 
[test]> 
[test]> select * from tt;
+----+------+
| c1 | c2   |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
|  3 | ccc  |
+----+------+
3 rows in set (0.00 sec)

使用insert ignore into语句时,如果主键冲突,只是提示"warnings"。

如果使用insert into语句时,如果主键冲突直接报错。

2、没有主键冲突时,直接插入数据

insert into 与 insert ignore into 都是直接插入数据

[test]> create table t2(c1 int, c2 varchar(50))engine = xxx;
Query OK, 0 rows affected (0.05 sec)
 
[test]> insert into t2 values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
GreatDB Cluster[test]> select * from t2;
+------+------+
| c1   | c2   |
+------+------+
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
+------+------+
3 rows in set (0.00 sec)
 
[test]> insert into t2 values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
 
[test]> insert into t2 values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
[test]> select * from t2;
+------+------+
| c1   | c2   |
+------+------+
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
|    1 | aaa  |
|    2 | bbb  |
|    3 | ccc  |
+------+------+
9 rows in set (0.00 sec)
 
[test]> insert ignore into t2 values(1, "aaa"), (2, "bbb"), (3, "ccc");
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

因此,insert ignore into主要是忽略重复的记录,直接插入数据。

insert ignore into--跳坑

首先,SQL语句:

<insert id="addTerm" parameterType="String">
        insert ignore into term(term) VALUES (#{term})
</insert>

然后,数据库表:

                                 

简单的不能再简单的一张表:解释一下,id是自增的,同时也是主键,term就是term喽,其他的外键、索引什么的都没有。

要求是:不能使term重复插入;

刚开始认为就是判断的插入的数据是否重复,然后发现不是这样的,它判断的是主键或者索引是否重复(更准确的来说是忽略主键冲突时报的错误)。

所以在这里要说说这个自增的id了,因为在insert ignore into插入的时候你的现在将要插入的数据的id已经是增加一了,所以你的这个自增主键id是无论如何也不能相等的,所以自然你的数据也就不会听话的把重复的数据不插入,这也就是为什么,即使ignore时没有插入数据它的自增的键也会跳过,所以这个要注意。

解决办法就是添加个索引就欧克了呗

因为重复的时候它的自增的键依然会增加,所以当数据的重复率很高的时候,可以考虑把自增的键搞成自己控制的一个因素,手动自增,岂不美滋滋?

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mysql中where与having的区别实例详解

    Mysql中where与having的区别实例详解

    当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句,下面这篇文章主要给大家介绍了关于Mysql中where与having区别的相关资料,需要的朋友可以参考下
    2023-01-01
  • 阿里云下配置MySQL远程连接的步骤详解

    阿里云下配置MySQL远程连接的步骤详解

    大家都知道阿里云默认是不能用客户端远程连接的,但最近因为工作的需要,不得不实现远程连接,下面这篇文章主要给大家介绍了在阿里云下配置MySQL远程连接的步骤,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • 新手必备之MySQL msi版本下载安装图文详细教程

    新手必备之MySQL msi版本下载安装图文详细教程

    今天教大家怎么下载安装MySQL msi版本,文中有非常详细的图文解说,对不会下载安装mysql的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Mysql 取字段值逗号第一个数据的查询语句

    Mysql 取字段值逗号第一个数据的查询语句

    Mysql 取字段值逗号第一个数据,在某些情况下还是比较实用的,主要使用到了left函数及其他等等,感兴趣的朋友可以参考下
    2013-10-10
  • Ubuntu 20.04 安装和配置MySql5.7的详细教程

    Ubuntu 20.04 安装和配置MySql5.7的详细教程

    这篇文章主要介绍了Ubuntu 20.04 安装和配置MySql5.7的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Mysql字符串类型如何通过order by排序的正确方式

    Mysql字符串类型如何通过order by排序的正确方式

    这篇文章主要介绍了Mysql字符串类型如何通过order by排序的正确方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mysql 数据库链接状态确认实验(推荐)

    mysql 数据库链接状态确认实验(推荐)

    这篇文章主要介绍了mysql 数据库链接状态确认实验,通过本文我选择 了三种方案给大家详细讲解,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • MySQL系列之十 MySQL事务隔离实现并发控制

    MySQL系列之十 MySQL事务隔离实现并发控制

    今天的内容就和大家聊一聊MySQL数据库中关于MySQL事务隔离实现并发控制的问题,主要是基于锁实现控制技术
    2021-07-07
  • Mysql数据库锁定机制详细介绍

    Mysql数据库锁定机制详细介绍

    这篇文章主要介绍了Mysql数据库锁定机制详细介绍,本文用大量内容讲解了Mysql中的锁定机制,例如MySQL锁定机制简介、合理利用锁机制优化MySQL等内容,需要的朋友可以参考下
    2014-12-12
  • MySQL递归查询的几种实现方法

    MySQL递归查询的几种实现方法

    本文主要介绍了MySQL递归查询的几种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10

最新评论