80 Unix shell脚本可以用来操作数据库吗?

我必须从一些文件中读取数据,并将数据插入数据库中的不同表中。Unix shell脚本是否足够强大来完成这项工作?

它是容易做的工作在shell脚本或我应该去做这在Java?

请先 登录 后评论

8 个回答

Josti

现在还不能测试,但可以这样:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database

在shell脚本中应该可以工作。但是不知道如何从它中获取数据

请先 登录 后评论
Jean

这是可能的:使用你的unix shell脚本,生成一个sql脚本,并使用命令行到数据库执行sql脚本。

如果信息量足够小,你可以在内存中构建SQL,但我建议不要这样做,因为你永远不知道未来会发生什么(可能是非常大的数据量)。对每个请求使用一个调用不能让您从有时可用的批量操作中受益。

请先 登录 后评论
Charles Ma

可以,但可能有点难看,例如,如果您使用mysql,并假设您有一个SQL字符串存储在$ SQL中

echo $sql | mysql -u[user] -p[password] -h[host]

另外,最好告诉我们你使用的数据库是什么,这样我们才能提供更具体的帮助

编辑:修改了示例行,使其实际工作

请先 登录 后评论
lbz

Shell脚本(Bash或类似的脚本)的主要目的不是处理数据库。选择Java或者更好的,利用这个机会学习Python或Ruby等脚本语言的基础知识。

请先 登录 后评论
Yining

烟斗是你的朋友。

例如,在MySQL中:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

应该做的工作。

如果你的文件以某种方式结构化,例如逗号/制表符分隔等。

有关详细信息,请查看数据库的手册。

请先 登录 后评论
Mike Desjardins

当然可以,前提是手边有一个命令行SQL客户端!我已经使用Sybase和isql命令行客户机完成了它。您甚至可以通过awk发送内容,并发送脚本动态生成命令。这可能不是做所有事情的最有效的方法,但有很多机会可以发挥Unix黑客的魔力。

请先 登录 后评论
Michael Cramer

如果您试图导入的数据具有合理的格式(例如,以逗号分隔),并且数据库服务器具有合理的命令行实用程序,那么这应该没有问题。MySQL有"mysqlimport"命令行工具,它将接受描述文件格式的各种参数:

mysqlimport \
    --fields-terminated-by=, \
    --ignore-lines=1 \
    --fields-optionally-enclosed-by='"' < datafile.txt

通过perl/sed/awk一行程序传递数据可以帮助获得正确的格式,shell脚本可以轻松处理文件名提示、处理参数等。

使用Unix提供的各种命令行工具是bash脚本的全部要点。Perl、mysql等都是该工具包的一部分。

请先 登录 后评论
eckes

这取决于你的数据库管理系统。它们中的大多数都有用于导入数据的强大shell工具,甚至可以执行一些ETL功能。如果这些工具支持批量加载,它们的性能甚至会非常好——通常Java JDBC做不到这一点。

请先 登录 后评论