在 MySQL 中插入值的 Bash 脚本
- 2024-11-04 08:43:00
- admin 原创
- 32
问题描述:
我想编写一个 bash 脚本,连接到我的 MySQL 服务器并从 txt 文件中插入一些值。我已将其写下来:
#!/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 马尔萨拉
解决方案 1:
尝试一下这个:
#!/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 命令执行。
解决方案 2:
假设您要添加许多行,则可能需要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
通过阅读文档你会发现有很多选项。
解决方案 3:
您尝试在需要 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;
解决方案 4:
我用的是这个并且有效:
mysql -uroot -proot < infile
或者先选择数据库
./mysql -uroot -proot db_name < infile
或者将整个 SQL 复制到剪贴板并粘贴
pbpaste > temp_infile && mysql -uroot -proot < temp_infile && rm temp_infile
解决方案 5:
#!/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
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD