MySQL中的Insert Ignore语句具有一项特殊功能,每当无涯教程向表中插入单行或多行时,它都会忽略无效行。可以通过以下解释来理解它,其中一个表包含一个主键列。
主键列不能将重复的值存储到表中。 例如,student_roll_number 对于每个学生应该始终是唯一的。同样,公司中的 employee_id 应该始终与员工表区分开。当尝试将重复记录插入具有主键列的表中时,它会产生一条错误消息。但是,如果使用INSERT IGNORE语句将重复的行添加到具有主键列的表中,则MySQL不会产生任何错误。当尝试批量插入记录时,首选此语句,并且由此产生的错误可能会中断执行过程。因此,它不会将任何记录存储到表中。在这种情况下,INSERT IGNORE语句仅生成警告。
下面是INSERT IGNORE语句避免错误的情况:
以下是在MySQL中使用INSERT IGNORE语句的语法:
INSERT IGNORE INTO table_name (column_names) VALUES ( value_list), ( value_list) .....;
让无涯教程借助示例了解INSERT 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 );
UNIQUE 约束确保不能在 email列中插入重复的值。接下来,需要将记录插入表中。可以执行以下语句将数据添加到表中:
INSERT INTO Student(Stud_ID, Name, Email, City) VALUES (1,'Stephen', 'stephen@learnfk.com', 'Texax'), (2, 'Joseph', 'Joseph@learnfk.com', 'Alaska'), (3, 'Peter', 'Peter@learnfk.com', 'california');
最后,执行 SELECT 语句以验证插入操作:
SELECT * FROM Student;
无涯教程可以在表中有 3 行的地方看到以下输出:
执行以下语句,尝试将两个记录添加到表中:
INSERT INTO Student(Stud_ID, Name, Email, City) VALUES (4,'Donald', 'donald@learnfk.com', 'New York'), (5, 'Joseph', 'Joseph@learnfk.com', 'Chicago');
它将产生错误: ERROR 1062 (23000): Duplicate entry 'Joseph@javatpoint.com' for key 'student.Email' 。
现在,看看如果在上面的查询中使用INSERT IGNORE语句会发生什么:
链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-insert-ignore.html
来源:LearnFk无涯教程网
INSERT IGNORE INTO Student(Stud_ID, Name, Email, City) VALUES (4,'Donald', 'donald@learnfk.com', 'New York'), (5, 'Joseph', 'Joseph@learnfk.com', 'Chicago');
MySQL将产生一条消息:添加了一行,而另一行被忽略。
1 row affected, 1 warning(s): 1062 Duplicate entry for key email. Records: 2 Duplicates: 1 Warning: 1
无涯教程可以使用 SHOW WARNINGS 命令查看详细的警告:
因此,可以说如果使用INSERT IGNORE语句,MySQL会发出警告而不是发出错误。
在MySQL中,STRICT MODE处理 无效或缺失的值 ,这些值将使用INSERT或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');
可以看到指定的名称验证了名称列约束,因此它将成功添加。执行SELECT语句以验证结果。它将给出如下输出:
接下来,插入长度大于五的名称:
INSERT INTO Test(Name) VALUES ('Stephen');
由于严格模式为ON,MySQL不添加值并给出错误消息。但是,如果使用INSERT IGNORE语句插入相同的字符串,它将发出警告消息,而不是引发错误。
INSERT IGNORE INTO Test(Name) VALUES ('Stephen');
最后,无涯教程执行了SHOW WARNINGS命令来检查警告消息。下面的输出更清楚地说明了它,它显示了MySQL在将数据插入表之前试图截断数据。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)