Mysql 简明教程
MySQL - Insert Ignore
在 MySQL 中,可以 INSERT INTO 语句来将一个或多个记录插入到表中。
在某些情况下,如果某个特定列有唯一约束,并且我们尝试使用 INSERT INTO 语句将重复记录添加到该特定列,则 MySQL 将终止该语句并返回错误。结果,没有行被插入到表中。
MySQL Insert Ignore Statement
然而,如果我们使用 MySQL INSERT IGNORE INTO 语句,它将不会显示错误。相反,它允许我们将有效数据插入到表中,并忽略会导致错误的包含无效数据的行。
以下是 INSERT IGNORE INTO 语句避免错误的一些情况:
-
当我们向有 UNIQUE 键或 PRIMARY 键约束的表中插入重复值时。
-
当我们尝试向在其中有 NOT NULL 约束的列添加 NULL 值时。
Syntax
以下是 MySQL 中 INSERT IGNORE 语句的语法 −
INSERT IGNORE INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Example
首先,让我们使用以下查询创建一个名为 CUSTOMERS 的表 −
Note: UNIQUE 约束确保没有重复值可以存储或插入到 NAME 列中。
CREATE TABLE CUSTOMERS (
ID int NOT NULL,
NAME varchar(20) NOT NULL UNIQUE,
PRIMARY KEY (ID)
);
以下查询将三条记录插入到 CUSTOMERS 表中 −
INSERT INTO CUSTOMERS (ID, NAME)
VALUES (1, "Ajay"), (2, "Vinay"), (3, "Arjun");
执行以下查询以显示 CUSTOMERS 表中存在的记录 −
SELECT * FROM CUSTOMERS;
以下是 CUSTOMERS 表的记录:
现在,让我们使用以下查询向 CUSTOMERS 表的 NAME 列中插入一条重复记录 −
INSERT INTO CUSTOMERS (NAME) VALUES (2, "Arjun");
它返回了一个错误,因为 NAME “Arjun” 已存在于该列中,因此它违反了 UNIQUE 约束。
ERROR 1062 (23000): Duplicate entry 'Arjun' for key 'customers.NAME'
现在,让我们使用 INSERT IGNORE 语句,如下所示 −
INSERT IGNORE INTO CUSTOMERS (NAME) VALUES (2, "Arjun");
MySQL INSERT IGNORE and STRICT mode
严格模式控制 MySQL 如何处理通过诸如 INSERT 或 UPDATE 数据更改语句将添加到表中的无效、缺失或超出范围的值。
因此,如果严格模式是 ON ,并且我们尝试使用 INSERT 语句将一些无效值插入表中,那么 MySQL 终止语句并返回一条错误消息。
但是,如果我们使用 INSERT IGNORE INTO 语句,MySQL 将调整这些值以使其有效,而不是返回错误。
Example
让我们使用以下查询创建一个名为 CUSTOMERS 的表 −
Note: NAME 列仅接受长度小于或等于五的字符串。
CREATE TABLE CUSTOMERS (
ID int NOT NULL,
NAME varchar(5),
PRIMARY KEY (ID)
);
在此尝试插入值到 NAME 列中,其长度大于 5。
INSERT INTO CUSTOMERS (NAME) VALUES (1, "Malinga");
它返回了下述错误 −
ERROR 1406 (22001): Data too long for column 'NAME' at row 1
现在尝试使用 INSERT IGNORE 语句插入同一字符串 −
INSERT IGNORE INTO CUSTOMERS (NAME) VALUES (1, "Malinga");