2016-06-01 247 views
3

在bash脚本中编写静态sql语句被认为是不好的做法?你能详细说明为什么吗?在sql语句中使用Shell脚本的优缺点

对不起,这不完全是一个具体的编程问题,但我想确定之前,我写的脚本。

在此先感谢。

+0

谁或什么将执行脚本? –

+0

你能举个例子吗? – Schwern

+1

应该关闭。主要基于意见。 – vol7ron

回答

0

我假设你正在谈论的东西像喂SQL到mysql命令行。

它将具有与使用SQL抽象层一样的硬编码SQL和任何其他编程语言相同的问题。

  • SQL可能特定于某种类型的数据库(即MySQL或Postgres或MSSQL)。
  • 这将很难适应模式的变化。
  • 很难重用和修改存储在字符串中的SQL,导致更多的代码。
    • 例如:尝试的命令或另一列SELECT foo FROM bar LIMIT 10

再加上一些更独特添加到使用的可执行文件,而不是DB库。

  • 您必须解析输出。这可能导致错误和安全漏洞。
  • 每个查询将携带额外的开销...
    • 必须为每个查询建立一个新的连接。
    • 每个查询必须分叉并执行一个新程序。
    • 没有客户端级别的查询缓存可以发生(但服务器可以)。
    • 语句句柄不能被缓存。
    • 输出将不得不格式化。
    • 输出将不得不经过额外的I/O层。
  • 无法使用绑定参数使其更容易受到SQL injection attacks的攻击。
  • 错误检查会更困难,您必须解析错误语句。

有一些方法可以缓解这种情况,您可以批量查询,并且可以编写一个确实绑定了参数的SQL查询程序,但这些是用于运行查询的shell解决方案的一般问题。一般来说,您应该考虑使用具有可靠的SQL抽象库的编程语言。大多数编程语言都有一个。