可以使用Unix Shell脚本来操作数据库吗?
我必须从某些文件中读取数据,然后将数据插入数据库中的不同表中。 Unix Shell脚本是否足够强大来完成这项工作?
在shell脚本中完成这项工作容易吗,还是应该在Java中进行?
解决方案
回答
目前无法测试,但类似:
echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | mysql -u user -psecret -h host database
在shell脚本中应该可以工作。虽然不知道如何从中获取数据
回答
有可能的 :
使用unix shell脚本,生成一个sql脚本,并使用cli访问数据库以执行sql脚本。
如果信息量足够小,则可以在内存中构建SQL,但我建议我们不要这样做,因为我们永远都不知道将来会发生什么(而且可能是大量数据)。每个请求只使用一个呼叫并不能使我们从有时可用的批量操作中受益。
回答
我们可以,但是可能有点丑陋,例如,如果我们使用的是mysql并假设我们在$ sql中存储了一个SQL字符串,
echo $sql | mysql -u[user] -p[password] -h[host]
p.s.告诉我们我们使用的是哪个数据库可能是一个好主意,因此我们可以提供更具体的帮助:p
编辑:更改示例行,以便它实际工作
回答
Shell脚本(Bash或者类似脚本)的主要目的是不处理数据库。选择Java或者更好的语言,抓住这个机会学习Python或者Ruby之类的脚本语言的基础知识。
回答
烟斗是你的朋友。
例如,在MySQL中:
echo 'load data infile /path/to/the/file into table table_name ...' | mysql -u mysql_user_id -p
应该做的工作。
如果文件以某种方式进行了结构化,例如逗号/制表符分隔等。
有关详细信息,请查阅数据库手册。
回答
当然可以,前提是我们拥有方便的命令行SQL客户端!我已经完成了w / Sybase和isql命令行客户端。我们甚至可以变得更聪明,并通过awk发送内容,并发送脚本以即时生成命令。它可能不是做所有事情的最有效方法,但是仍有很多机会可以发挥Unix黑客的魔力。
回答
如果我们要导入的数据采用合理的格式(例如,以逗号分隔),并且数据库服务器具有合理的命令行实用程序,则应该没有问题。 MySQL具有" mysqlimport"命令行工具,该工具将接受描述文件格式的各种参数:
mysqlimport \ --fields-terminated-by=, \ --ignore-lines=1 \ --fields-optionally-enclosed-by='"' < datafile.txt
通过perl / sed / awk一线传递数据可以帮助以正确的格式获取数据,并且shell脚本可以轻松地处理提示文件名,处理参数等。
使用Unix提供的各种命令行工具是bash脚本编写的全部重点。 Perl,mysql等都是该工具箱的一部分。
回答
这取决于数据库管理系统。他们中的大多数人都有强大的shell工具来导入数据,甚至可以执行一些ETL功能。如果这些工具支持批量加载,那么它们甚至可能会非常出色,通常Java JDBC不能那么容易做到。