MySQL批量插入遇上唯一索引避免方法(避免导入重复数据)
为避免导入重复数据,建议建立唯一索引 , 防止批量插入时,遇上唯一索引,可以使用以下3种方法避免方法
- 导入差异数据,忽略重复数据,IGNORE INTO的使用
- 导入并覆盖重复数据,REPLACE INTO 的使用
- 导入保留重复数据未指定字段,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也没有办法。