我使用一个bash脚本使用mysqlimport
将5个不同的csv
文件导入到一个公共数据库表中。
File[0]=one
File[1]=two
File[2]=three
File[3]=four
File[4]=five
for i in 0 1 2 3 4 5 6 7 8 9 10
do
mysqlimport --fields-optionally-enclosed-by=\" --fields-terminated-by=, --lines-terminated-by="<br />\n" -uusername -ppassword --local tablename /path/${File[i]}.txt
done
现在我想在common表中添加一个额外的列,每个文件都有一个惟一的id。对于one.csv的所有条目,id的值都是1。
有没有办法在通过bash脚本导入的同时执行此操作?我不想每次都去mysql控制台,从那里开始。
如有任何建议,我们将不胜感激。
最佳答案
首先,mysqlimport只是LOAD DATA INFILE
SQL statement的一个包装器,虽然mysqlimport是一个很好的便利,但它有两个限制,这将使您试图做的事情变得困难,即:
不能指定表名,它从文件名推断表名
您希望使用的选项,在这里,可以将cc>字段引用到给定的导入值上,但不存在作为MySQLIMPART的选项(虽然它在裸SQL上确实存在)。
因此,您可能希望跳过mysqlimport并直接执行sql语句。
像这样的事情应该可以:
File[0]=one
File[1]=two
File[2]=three
File[3]=four
File[4]=five
for i in 0 1 2 3 4 5 6 7 8 9 10
do
qry="LOAD DATA LOCAL INFILE '/path/${File[i]}.txt' INTO TABLE tablename FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\\"' LINES TERMINATED BY \"<br />\n\" (list,comma,separated,column,names,here) SET source_id='$i'"
mysql -uusername -ppassword << eof
$qry
eof
done
set
字段是在导入时设置该字段的关键。注意:这段代码没有经过测试,但它应该能让您朝着正确的方向前进,只需阅读mysql手册中的
SET source_id='$i'
和google“mysql bash”。关于mysql - 使用mysqlimport时添加一列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13651322/