代码之家  ›  专栏  ›  技术社区  ›  Niyaz

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

  •  1
  • Niyaz  · 技术社区  · 16 年前

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

    在shell脚本中执行任务是否容易,还是应该在Java中执行?

    8 回复  |  直到 10 年前
        1
  •  3
  •   Henk Langeveld    12 年前

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

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

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

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

        2
  •  2
  •   Jean    16 年前

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

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

        3
  •  2
  •   Mike Desjardins    16 年前

    当然可以,假设您手头有一个命令行SQL客户机!我已经使用Sybase和ISQL命令行客户机完成了这项工作。你甚至可以变得聪明,通过awk发送东西,发送脚本来动态生成命令。这可能不是最有效的方法来做每件事,但有足够的机会来灵活您的Unix黑客Mojo。

        4
  •  2
  •   jaypal singh    10 年前

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

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

    另外,最好告诉我们您使用的数据库,以便我们提供更具体的帮助:p

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

        5
  •  1
  •   Henk Langeveld    12 年前

    Pipe是你的朋友。

    例如,在MySQL中:

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

    应该做这个工作。

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

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

        6
  •  0
  •   eckes    16 年前

    这取决于您的数据库管理系统。它们中的大多数都有用于导入数据的强大shell工具,甚至可以执行一些ETL函数。如果这些工具支持批量加载,这些工具甚至可以非常有效,通常JavaJDBC不太容易做到这一点。

        7
  •  0
  •   Henk Langeveld    12 年前

    现在无法测试,但类似于:

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

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

        8
  •  -2
  •   lbz    16 年前

    shell脚本(bash或类似)的主要目的不是处理数据库。去Java或者更好的地方,利用这个机会来学习脚本语言的基本知识,比如Python或Ruby。