MySQL INSERT IGNORE语句

MySQL INSERT IGNORE语句

在MySQL中,INSERT IGNORE语句具有一个特殊的功能,即在向表中插入单个或多个行时忽略 无效的行 。我们可以通过以下解释来理解它,其中一个表包含一个主键列。

主键列不能向表中存储重复的值。例如, 学生的学号 应该对每个学生都是唯一的。同样地,公司中的 员工编号 应该在员工表中是唯一的。当我们尝试向具有主键列的表中插入重复的记录时,它会产生一个错误消息。然而,如果我们使用INSERT IGNORE语句向具有主键列的表中添加重复的行,MySQL不会产生任何错误。当我们尝试批量插入记录并且可能产生错误时,这个语句是首选的,因为错误可能会中断执行过程。因此,它不会将任何记录存储到表中。在这种情况下,INSERT IGNORE语句只会产生警告。

以下是INSERT IGNORE语句避免错误的情况:

  • 当我们尝试向具有PRIMARY或UNIQUE KEY约束的表的列中插入重复的键时。
  • 当我们尝试向具有NOT NULL约束的表的列中添加NULL值时。
  • 当我们尝试向分区表中插入记录,输入的值与列出的分区的格式不匹配时。

语法

以下是在MySQL中使用INSERT IGNORE语句的语法:

INSERT IGNORE INTO table_name (column_names)
VALUES ( value_list), ( value_list) .....;

MySQL IGNORE 示例

让我们通过一个示例来了解 IGNORE 语句在 MySQL 中的工作原理。首先,我们需要使用以下语句创建一个名为 “Student” 的表:

CREATE TABLE Student (
  Stud_ID int AUTO_INCREMENT PRIMARY KEY,
  Name varchar(45) DEFAULT NULL,
  Email varchar(45) NOT NULL UNIQUE,
  City varchar(25) DEFAULT NULL
);

唯一约束 确保我们不能在 email列 中插入重复值。接下来,需要将记录插入表中。我们可以执行以下语句将数据添加到表中:

INSERT INTO Student(Stud_ID, Name, Email, City) 
VALUES (1,'Stephen', 'stephen@javatpoint.com', 'Texax'), 
(2, 'Joseph', 'Joseph@javatpoint.com', 'Alaska'), 
(3, 'Peter', 'Peter@javatpoint.com', 'california');

最后,执行 SELECT 语句来验证插入操作:

SELECT * FROM Student;

我们可以看到下面的输出,其中我们有三行进入表格:

MySQL INSERT IGNORE语句

让我们执行下面的语句,它将尝试向表中添加两条记录:

INSERT INTO Student(Stud_ID, Name, Email, City) 
VALUES (4,'Donald', 'donald@javatpoint.com', 'New York'), 
(5, 'Joseph', 'Joseph@javatpoint.com', 'Chicago');

它将产生一个错误: ERROR 1062 (23000): 重复条目 ‘ stash ‘ 对于键 ‘student.Email’ 因为电子邮件违反了唯一约束。

现在,让我们看看如果我们在上述查询中使用INSERT IGNORE语句会发生什么:

INSERT IGNORE INTO Student(Stud_ID, Name, Email, City) 
VALUES (4,'Donald', 'donald@javatpoint.com', 'New York'), 
(5, 'Joseph', 'Joseph@javatpoint.com', 'Chicago');

MySQL将会产生一条消息:增加了一行,另一行被忽略。

1 row affected, 1 warning(s): 1062 Duplicate entry for key email.
Records: 2  Duplicates: 1  Warning: 1

我们可以使用 SHOW WARNINGS 命令查看详细的警告:

MySQL INSERT IGNORE语句

因此,我们可以说,如果我们使用INSERT IGNORE语句,MySQL会给出一个警告而不是发出错误。

MySQL的INSERT IGNORE和严格模式

在MySQL中,严格模式处理要使用INSERT OR UPDATE语句添加到表中的无效或缺失的值。如果严格模式为ON,并且我们尝试使用INSERT语句将无效的值添加到表中,该语句将被中止,并且我们将收到一个错误消息。

然而,如果我们使用INSERT IGNORE命令,MySQL会产生一个警告消息,而不是抛出一个错误。此外,此语句尝试截断值以使其在插入表之前变为有效。

让我们通过一个例子来理解它。首先,我们将使用以下语句创建一个名为”Test”的表:

CREATE TABLE Test (
    ID int AUTO_INCREMENT PRIMARY KEY,
    Name varchar(5) NOT NULL
);

在上述表格中,name列只接受长度小于或等于 五个字符 的字符串。现在,执行以下语句将记录插入表中。

INSERT INTO Test(Name)
VALUES ('Peter'), ('John');

我们可以看到指定的姓名验证通过了name列的约束条件,所以它将成功地被添加。执行SELECT语句来验证结果。它将输出如下:

MySQL INSERT IGNORE语句

接下来,插入长度大于五的名称:

INSERT INTO Test(Name) VALUES ('Stephen');

MySQL不会添加值并显示错误消息,因为严格模式是开启的。然而,如果我们使用INSERT IGNORE语句插入相同的字符串,它将会给出警告信息而不是抛出错误。

INSERT IGNORE INTO Test(Name) VALUES ('Stephen');

最后,我们执行了SHOW WARNINGS命令来检查警告消息。下面的输出更清楚地解释了,显示MySQL在插入数据之前尝试截断数据。

MySQL INSERT IGNORE语句

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程