发布于 5年前

MySQL批量插入遇上唯一索引避免方法(避免导入重复数据)

为避免导入重复数据,建议建立唯一索引 , 防止批量插入时,遇上唯一索引,可以使用以下3种方法避免方法

  1. 导入差异数据,忽略重复数据,IGNORE INTO的使用
  2. 导入并覆盖重复数据,REPLACE INTO 的使用
  3. 导入保留重复数据未指定字段,INSERT INTO ON DUPLICATE KEY UPDATE 的使用

详细说明可参考地址 https://blog.csdn.net/jinmaodao116/article/details/54134480

thinkphp 中可以使用 replace 写入,如:

$data = [
    ['foo' => 'bar', 'bar' => 'foo'],
    ['foo' => 'bar1', 'bar' => 'foo1'],
    ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data, true);

但是这样只能实现 REPLACE INTO(替换掉) 的功能,而不能实现 IGNORE INTO(忽略掉)的功能。目前ThinkPHP也没有办法。

©2020 edoou.com   京ICP备16001874号-3