一、背景
项目开发拷贝功能,需要对数据库数据进行批量拷贝插入,插入数据顺序不一致
insert into tabA(`unit_id`, `unit_name`)
values
('public_filter_679625158335676417', '城市'),
('public_filter_679625158335676418', '校区'),
('public_filter_679625158331482120', '产品'),
('public_filter_679625158335676416', '课程类型'),
('public_filter_679625158331482118', '新老生'),
('public_filter_679625158331482119', '时间')
sql插入顺序:
城市,校区,产品,课程类型,新老生,时间
实际插入顺序
新老生,时间,产品,课程类型,城市,校区
二、原因
1、InnoDB引擎区分为顺序插入和随机插入数据,这个主要根据主键是否插入且主键是否有序,或者插入时指定的排序字段
2、我们插入的数据未使用我们自己生成的自增ID,由数据库生成,数据库会自动根据数据表设置的索引排序规则进行排序,因此,我们使用的数据批量插入为随机插入数据
三、解决
1、生成主键自增id,保证我们插入为顺序插入
INSERT into test_tmp(id,val) VALUES (1,'a'),(2,'b'),(3,'c');
2、要求除了自增ID外,其余字段不得添加索引
3、不追求插入顺序,解决查询顺序问题