我想创建一个连接到MySQL服务器的bash脚本,并从txt文件中插入一些valuse。 我写下来了:
#!/bin/bash
echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;
但我收到了以下错误:
第1行的错误1136(21S01):列数与值计数不匹配 在第1行
我认为错误发生在我的txt文件中,但我尝试了很多变化,但仍然没有成功的希望。
我的txt文件如下所示:
10.16.54.29 00:f8:e5:33:22:3f marsara
答案 0 :(得分: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;
这样你就可以将文件流式传输以及mysql命令执行。
答案 1 :(得分: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
LOAD DATA INFILE
有许多选项,您可以通过阅读文档来发现。
答案 2 :(得分:5)
您正试图在需要3个参数(IP,MAC和SERVER)的INSERT语句中将值“cat test.txt”作为字符串插入数据库中,因此这就是您收到此错误消息的原因。
您需要首先读取文本文件并提取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;
答案 3 :(得分:2)
我使用它并且它有效:
mysql -uroot -proot < infile
或先选择数据库
./mysql -uroot -proot db_name < infile
或将整个SQL复制到剪贴板中并使用
粘贴它pbpaste > temp_infile && mysql -uroot -proot < temp_infile && rm temp_infile
答案 4 :(得分:0)
#!/bin/bash
username=root
password=root
dbname=myDB
host=localhost
TS=$(date +%s)
echo $1
mysql -h$host -D$dbname -u$username -p$password -e"INSERT INTO dailyTemp (UTS, tempF) VALUES ($TS, $1);"
exit 0