sql - 在SQL语句中使用Shell脚本的优缺点

标签 sql shell

在bash脚本中编写静态sql语句是否被视为不良做法?您能详细说明为什么吗?

抱歉,这不是一个具体的编程问题,但我想确定在编写脚本之前。

提前致谢。

最佳答案

我假设您正在谈论将SQL馈送至mysql命令行的事情。

与使用任何其他编程语言相比,硬编码SQL与使用SQL抽象层都将遇到相同的问题。

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

  • 再加上一些使用可执行文件而不是数据库库的独特功能。
  • 您必须解析输出。这可能会导致错误和安全漏洞。
  • 每个查询都会带来额外的开销...
  • 必须为每个查询建立一个新的连接。
  • 每个查询都必须派生并执行一个新程序。
  • 无法进行客户端级查询缓存(但服务器可以)。
  • 语句句柄无法缓存。
  • 必须格式化输出。
  • 输出将必须通过I / O的其他层。
  • 不能使用Bind参数使它更容易受到SQL injection attacks的攻击。
  • 错误检查将更加困难,您必须分析错误语句。

  • 有多种方法可以缓解这种情况,可以批处理查询,也可以编写一个绑定(bind)参数的SQL查询程序,但这是炮轰运行查询的常见问题。通常,您应该考虑使用带有可靠SQL抽象库的编程语言。大多数编程语言都有一种。

    关于sql - 在SQL语句中使用Shell脚本的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37560051/

    相关文章:

    shell - 在shell脚本中使用ssh变量

    python - 我如何在 X 中获得第一个未使用的显示?

    linux - 并行运行脚本命令

    mysql - MYSQL中如何从Varchar字段中选择Max Numeric

    php - 如何将我的 blob 发布到同一 id 的不同行中?

    sql - 如何合并 2 个具有不同值的重复表?

    linux - rsync 和 --link-dest 的磁盘使用问题

    bash - 如何使一个简单的 if 语句太长?

    与内部连接相反的mysql

    javascript - 描述对页面上的字符数有限制。 PHP