我使用一个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/

10-10 16:28