Laravel 中使用 insertOrIgnore 插入数据的时候重复的数据仍然会插入

  • 在使用 insertOrIgnore 插入数据的时候, 如果数据库中存在数据的话, 就不插入
  • 但是我在使用 insertOrIgnore 插入的时候, 仍然有重复的数据, 我这里重复的数据是除了主键不同, 其他的都相同

  • 那么, 什么样的数据才算是重复的数据呢? 是除了主键不同, 其他的都相同的吗?
  • 求指教下
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

这个要根据你的数据库表有关系,默认主键 id 自增且唯一,所以会根据 id 判断是否重复,其他字段不在乎。也就是说只要 id 相同,就认为是存在数据,就不会插入新数据。

同理,如果数据表中有共有 5 个字段,其中 3 个字段定义的是唯一,那么将要插入的数据中只要这三个字段对应的值在数据库中都不存在,即使另外 2 个字段值相同,就会插入新数据。如果这 3 个唯一字段中,任何一个字段对应的值在数据表中存在,即使另外 2 个字段值不同,也不会插入数据。

底层 queryBuilder 转 SQL 后,使用的是 INSERT IGNORE 关键字,你可以查查相关语法。

2年前 评论
qingshui (楼主) 2年前
讨论数量: 3

这个ignore的意思时,你建了唯一索引,插入出错时忽略,不是你数据的重复。

2年前 评论
qingshui (楼主) 2年前

这个要根据你的数据库表有关系,默认主键 id 自增且唯一,所以会根据 id 判断是否重复,其他字段不在乎。也就是说只要 id 相同,就认为是存在数据,就不会插入新数据。

同理,如果数据表中有共有 5 个字段,其中 3 个字段定义的是唯一,那么将要插入的数据中只要这三个字段对应的值在数据库中都不存在,即使另外 2 个字段值相同,就会插入新数据。如果这 3 个唯一字段中,任何一个字段对应的值在数据表中存在,即使另外 2 个字段值不同,也不会插入数据。

底层 queryBuilder 转 SQL 后,使用的是 INSERT IGNORE 关键字,你可以查查相关语法。

2年前 评论
qingshui (楼主) 2年前

可以理解为 insertOrIgnoreWhenFailed

2年前 评论
qingshui (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!