Bash脚本在MySQL中插入值

时间:2013-08-01 14:58:13

标签: 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;

但我收到了以下错误:

  

第1行的错误1136(21S01):列数与值计数不匹配   在第1行

我认为错误发生在我的txt文件中,但我尝试了很多变化,但仍然没有成功的希望。

我的txt文件如下所示:

  

10.16.54.29 00:f8:e5:33:22:3f marsara

5 个答案:

答案 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