批量插入数据时唯一索引重复解决方法
发表于:2026-06-01 03:33:54浏览:1次
一:场景
1:表结构和数据
CREATE TABLE `test` (
`id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 32 ) NOT NULL COMMENT '名字',
`age` TINYINT(3) UNSIGNED NOT NULL COMMENT '年龄',
PRIMARY KEY ( `id` ),
UNIQUE KEY `uni_username` (`username`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
INSERT INTO test (username,age) VALUES
("假装是李白",18),
("鲁迅是不是周树人",38),
("微微一笑",16);
2:需求写入数据,username有可能会重复
INSERT INTO test (username,age) VALUES
("test",38),
("假装是李白",18),
("test1",38),
("test2",16);
批量插入数据,里面有唯一索引冲突,会报错,全部插入不成功。
3,用replace插入
REPLACE的工作方式与INSERT完全相同,不同之处在于,如果 table 中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除该旧行
REPLACE INTO test (username,age) VALUES
("test",38),
("假装是李白",18),
("test1",38),
("test2",16);
执行之前
执行之后
二:方案
1:thinkphp,第二个参数为true代表使用replace
Db::name("test")->insertAll($data, true)
