Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.6k views
in Technique[技术] by (71.8m points)

mysql 能不能导入文件批量插入到指定字段?

文件 value.txt :

1
2
2
3

1.有没有什么语句可以做到效果:

INSERT INTO table_name (column, value) VALUES ('固定的', 1);
INSERT INTO table_name (column, value) VALUES ('固定的', 2);
INSERT INTO table_name (column, value) VALUES ('固定的', 2);
INSERT INTO table_name (column, value) VALUES ('固定的', 3);

2.满足1的条件下,如果 value 字段是唯一索引,能否忽略错误并执行完成插入 3?

目前使用场景主要是批量导入大数据,想解决性能问题


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

我认为你是在 linux 下面哈,原谅我 sed 用的不太熟.

g@iMac ~ ~ ? cat a.txt                     
1
2
2
3
g@iMac ~ ? sort a.txt|uniq|xargs -I {} echo "INSERT INTO table_name (column, value) VALUES ('固定的', {});" >> b.sql
g@iMac ~ ~ ? cat b.sql
INSERT INTO table_name (column, value) VALUES ('固定的', 1);
INSERT INTO table_name (column, value) VALUES ('固定的', 2);
INSERT INTO table_name (column, value) VALUES ('固定的', 3);

关于批量导入大数据的场景,我的建议是,先删掉所有的索引,然后导入数据,数据导入完成之后再加回索引,这样快多了, 不然带索引插入,索引不停的分裂重建,效率不会太高的.

唯一索引的话,也一样,后建立,最好能在数据源层面就先去掉冲突的数据. 像上面的数据源,第一步我就排序去重了.如果你是从别的数据库里查询导出的,查询时做个聚合去重再导出就好了.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...