批量插入数据时唯一索引重复解决方法
发表于:2026-06-01 03:33:54浏览:58次
一:场景
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)
推荐文章
- centos宝塔面板为php7.4安装sqlsrv扩展使其支持sqlserver数据库
- MySQL给root开启远程访问权限(MySQL 5.7或5.6)
- 服务器用SSH秘钥对认证登录
- 使用JMeter进行压测接口
- thinkphp5使用ODBC Driver 18 for SQL Server报错EE certificate key too weak
- PHP 项目性能分析平台搭建 (tideways + xhgui+ PHP7)
- composer使用记录
- 对mysql数据表结构操作的简单PHP脚本
- js异步编程promise 和 async+await
- ThinkPHP5.0.*版本 cli模式下 MySQL连接超时
