从stdin导入MySQL

Viv*_*oel 3 mysql bash awk

我正在使用awk在stdout中生成一个csv.有没有办法直接导入mysql中的内容而不将其放到文件中?

小智 8

正如@xdazz的答案所说,只需使用LOAD DATA LOCAL INFILE.我认为它是出于无知或懒惰而被贬低的.仔细阅读MySQL手册就会发现这是一个非常可行的答案.

在2016年,对于与大多数用户最相关的MariaDB,您可以这样做:

bash awk '{ /* My script that spits out a CSV */ }' | mysql --local-infile=1 -u user -ppassword mydatabase -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE mytable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';"

显然,请务必阅读本手册并LOAD DATA INFILE根据具体情况更改选项.


xda*_*azz -3

是的,只需使用管道即可。

$ 你的命令 | mysql -u 用户 -p

抱歉,这个答案还不够。您不能将 csv 直接通过管道输出到 mysql。你必须做额外的工作才能使结果成为有效的sql。

或者,您可以考虑使用 mysql 本机load data infile语法,它支持将 csv 文件加载到数据库。

  • 为什么给出这个答案?这不起作用。为什么它会受到好评?它不起作用。尝试一下。你会得到一个语法错误。仅当“your_command”的输出是有效的 SQL 时,这才有效,而 CSV 肯定不是。 (7认同)