更新:添加了一个示例来阐明数据的格式。
考虑每行格式如下的 CSV:
tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5,[tbl2.col1:tbl2.col2]+
其中 [tbl2.col1:tbl2.col2]+ 表示可以重复任意数量的这些对
例如:
tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2,tbl2.col1:tbl2.col2
这些表将使用行号作为键相互关联,除了上述任何列之外还必须创建该键。
- 有没有办法使用
mysql加载 data infile
加载数据到 两个单独的表? - 如果没有,什么 Unix 命令行工具 最适合这个吗?
最佳答案
不,不是直接的。加载数据只能插入到一个表或分区表中。
您可以做的是将数据加载到临时表中,然后使用insert into
将各个列选择到 2 个最终表中。如果您对 tbl2 的值使用不同的分隔符,您可能还需要 substring_index
。行号由登台表中的自动递增列处理(最简单的方法是将自动列放在登台表定义中的最后)。
格式不是很清楚,最好用 perl/php/python 完成,但如果你真的想使用 shell 工具:
cut -d , -f 1-5 file | awk -F, '{print NR "," $0}' > table1
cut -d , -f 6- file | sed 's,\:,\,,g' | \
awk -F, '{i=1; while (i<=NF) {print NR "," $(i) "," $(i+1); i+=2;}}' > table2
这将创建具有以下内容的表 1 和表 2 文件:
1,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
2,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
3,tbl1.col1,tbl1.col2,tbl1.col3,tbl1.col4,tbl1.col5
和
1,tbl2.col1,tbl2.col2
1,tbl2.col1,tbl2.col2
2,tbl2.col1,tbl2.col2
2,tbl2.col1,tbl2.col2
3,tbl2.col1,tbl2.col2
3,tbl2.col1,tbl2.col2
关于mysql - 数据库将 CSV 加载到多个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129076/