use*_*601 15 mysql sql linux bash scripting
我想创建一个连接到我的MySQL服务器的bash脚本,并从txt文件中插入一些valuse.我写下来了:
#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
第1行的错误1136(21S01):列计数与第1行的值计数不匹配
我想错误是在我的txt文件中,但我尝试了很多变化,但仍然没有成功的希望.
我的txt文件如下所示:
10.16.54.29 00:f8:e5:33:22:3f marsara
fej*_*ese 20
试试这个:
#!/bin/bash
inputfile="test.txt"
cat $inputfile | while read ip mac server; do
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('$ip', '$mac', '$server');"
done | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)
这样你流式读取文件以及mysql命令执行.
Syl*_*oux 11
假设您要添加许多行,您可能需要LOAD DATA INFILE
声明,而不是INSERT
.源文件必须在服务器上,但似乎就是这种情况.
像这样的东西:
#!/bin/bash
mysql -uroot -ptest test << EOF
LOAD DATA INFILE 'test.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ' ';
EOF
Run Code Online (Sandbox Code Playgroud)
LOAD DATA INFILE
通过阅读文档,您将发现许多选项.
您试图在INSERT语句中将值"cat test.txt"作为字符串插入到需要3个参数(IP,MAC和SERVER)的INSERT语句中,因此这就是您收到此错误消息的原因.
您需要首先读取文本文件并提取IP,MAC和服务器值,然后在查询中使用这些值,如果填充了这样:
#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('10.16.54.29', '00:f8:e5:33:22:3f', 'marsara');" | mysql -uroot -ptest test;
Run Code Online (Sandbox Code Playgroud)