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

时间:2008-09-16 12:39:49

标签: database shell unix

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

在shell脚本中完成这项工作是否容易,还是应该在Java中执行此操作?

8 个答案:

答案 0 :(得分:3)

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

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

通过perl / sed / awk单行传递数据有助于以正确的格式获取数据,shell脚本可以轻松处理文件名,处理参数等的提示。

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

答案 1 :(得分:2)

有可能: 使用unix shell脚本,生成一个sql脚本并使用cli到数据库来执行sql脚本。

如果信息量足够小你可以在内存中构建SQL,我建议反对它,因为你永远不知道未来会怎样(并且它可能是非常大量的数据)。每个请求使用一个调用不允许您从有时可用的批量操作中受益。

答案 2 :(得分:2)

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

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

P.S。告诉我们您使用的数据库可能是一个好主意,因此我们可以提供更具体的帮助:p

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

答案 3 :(得分:2)

当然你可以,假设你有一个方便的SQL客户端!我用Sybase和isql命令行客户端完成了它。你甚至可以通过awk聪明地发送东西并发送脚本来动态生成命令。它可能不是最有效的方法,但是有很多机会来展示你的Unix黑客魔力。

答案 4 :(得分:1)

管道是你的朋友。

例如,在MySQL中:

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

应该做的工作。

如果您的文件是以某种方式构建的,例如逗号/制表符分隔等。

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

答案 5 :(得分:0)

目前无法测试,但有类似的内容:

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

应该可以工作。不知道如何从中获取数据

答案 6 :(得分:0)

这取决于您的数据库管理系统。他们中的大多数都有强大的shell工具来导入数据,甚至可以执行一些ETL功能。如果它们支持批量加载,那些工具甚至可以非常高效 - 通常Java JDBC不能那么容易地做到这一点。

答案 7 :(得分:-2)

Shell脚本(Bash或类似)的主要目的不是处理数据库。转到Java甚至更好,借此机会学习Python或Ruby等脚本语言的基础知识。