MySQL INSERT IGNORE17 Mar 2025 | 4 分钟阅读 MySQL 中的 INSERT IGNORE 语句有一个特殊功能,它可以在我们插入单行或多行数据到表中时,忽略掉无效的行。我们可以通过下面的解释来理解这一点,其中一个表包含一个主键列。 主键列不能在表中存储重复值。例如,student_roll_number 对于每个学生都应始终唯一。同样,公司中的employee_id 在员工表中也应始终是唯一的。当我们尝试将重复记录插入到具有主键列的表中时,会产生错误消息。但是,如果我们使用 INSERT IGNORE 语句将重复行添加到具有主键列的表中,MySQL 不会产生任何错误。当我们在批量插入记录时,并且可能出现的错误会中断执行过程,此时就推荐使用此语句。因此,它不会将任何记录存储到表中。在这种情况下,INSERT IGNORE 语句只会生成警告。 下面是 INSERT IGNORE 语句可以避免错误的情况:
语法以下是在 MySQL 中使用 INSERT IGNORE 语句的语法: MySQL INSERT IGNORE 示例让我们通过一个示例来了解 INSERT IGNORE 语句如何在 MySQL 中工作。首先,我们需要创建一个名为 "Student" 的表,使用以下语句: UNIQUE 约束确保我们不能将重复值插入到 email 列中。接下来,需要向表中插入记录。我们可以执行以下语句将数据添加到表中: 最后,执行 SELECT 语句来验证插入操作: 我们可以看到下面的输出,表中有三行数据: ![]() 让我们执行以下语句,该语句将尝试向表中添加两条记录: 这将产生一个错误:ERROR 1062 (23000): Duplicate entry '[email protected]' for key 'student.Email',因为电子邮件违反了 UNIQUE 约束。 现在,让我们看看如果在上述查询中使用 INSERT IGNORE 语句会发生什么: MySQL 将会显示一条消息:已添加一行,另一行被忽略。 我们可以使用 SHOW WARNINGS 命令查看详细的警告: ![]() 因此,我们可以说,如果我们使用 INSERT IGNORE 语句,MySQL 将给出警告而不是报错。 MySQL INSERT IGNORE 和 STRICT 模式在 MySQL 中,STRICT MODE 处理在使用 INSERT 或 UPDATE 语句添加到表中的无效或缺失值。如果 strict mode 为 ON,并且我们尝试使用 INSERT 语句将无效值添加到表中,则语句将被中止,并且我们会收到错误消息。 但是,如果我们使用 INSERT IGNORE 命令,MySQL 会生成警告消息而不是抛出错误。此外,该语句会尝试截断值,使其在插入到表中之前是有效的。 让我们通过一个例子来理解这一点。首先,我们将创建一个名为 "Test" 的表,使用以下语句: 在上面的表中,name 列只接受长度小于或等于五个字符的字符串。现在,执行以下语句将记录插入到表中: 我们可以看到指定的名称验证了 name 列的约束,因此它将被成功添加。执行 SELECT 语句来验证结果。它将给出如下输出: ![]() 接下来,插入长度大于五的名称: MySQL 不会添加值并显示错误消息,因为 strict mode 为 ON。但是,如果我们使用 INSERT IGNORE 语句插入相同的字符串,它将显示警告消息而不是抛出错误。 最后,我们执行了 SHOW WARNINGS 命令来检查警告消息。下面的输出更清楚地解释了这一点,显示 MySQL 在插入表之前尝试截断数据。 ![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。