【问题标题】:mysql stored procedure versus script for mysql command line toolmysql 存储过程与 mysql 命令行工具的脚本
【发布时间】:2011-10-13 00:40:10
【问题描述】:

我必须在MySql中做很多批量计算,过滤数据,制作汇总表。

我应该使用存储过程还是调用 MySql 命令行的 bash 脚本?

据我所知,它们大致相同,但是 bash 脚本的优点是我可以使用 shell 函数作为宏来重新运行大语句并进行小的更改。

我的意思是 bash 脚本:

#!/bin/bash
#
arg1=$1
arg2=$2

mysql user pw db << EOF > output.out

  load table ....
  update xx set y = $arg1 if ...
  insert into xxx select a, b, avg(c) from xx group by a, b ...
  quit
EOF

我可以看到存储过程的唯一优点是它检查您为其参数提供的值的类型。 但是对于重用代码来说,shell 脚本会更加强大。我可以传入一个表名作为参数,或者从

更改 Where 子句
where name < 'Run14' 

到

where name regexp 'RunZ23..[A-M]' OR name = 'Run14'

通过将其作为参数传递。

性能不是问题。

谢谢 tt


多年后添加:

这有点类似于问题MySQL stored procedures or php code?。尽管存在分歧,但很多人更喜欢 PHP,我觉得 Who Needs Stored Procedures, Anyways? 给出的理由很好。 现在我更喜欢 PHP 函数而不是 MySql 存储过程。当然 PHP 比 bash 更适合编程。我认为存储过程的主要优势是速度,而这对我来说大部分时间都不是问题。

2012 年 7 月 11 日,我评论说:

我现在看到存储过程的一大优势是它们支持 IF、CASE 和 CURSOR LOOP 语句。

我的意思是:你可以在 Bash 中做这些事情,但你必须退出 MySql,将它的信息放入一个 shell 变量中,做出决定,然后再次启动 MySql 以进一步处理。

我不认为如果你使用 PHP 会有这样的优势,因为在 PHP 中更容易将 SQL 结果放入变量甚至数组中,而且你不必为每个语句打开一个全新的会话。

但是,在一个过程中执行许多 SQL 语句可能比在 Bash 或 PHP 中快得多,尤其是在存在循环时。

【问题讨论】:

  • 我现在看到存储过程的一大优势是它们支持 IF、CASE 和 CURSOR LOOP 语句。
  • 我写道“我现在看到存储过程的一大优势是它们支持 IF、CASE 和 CURSOR LOOP 语句。你可以在 bash 中做这些事情,但你必须退出 MySql,获取它的信息进入一个shell变量,做出决定,然后再次启动MySql以进一步处理。

标签: mysql bash stored-procedures macros


【解决方案1】:

如果我要在数据库中做一些工作并且该数据库提供过程编程结构,我会将过程代码放入数据库中。

代码将是健壮的(数据库为工作提供正确的工具 - 约束、自动错误处理等),它会更高效 - MySQL 引擎和主机之间的上下文切换更少,一旦创建过程将被编译并且将比“未编译”的 SQL 语句执行得更好,从数据库内部(以及从您的应用程序)调用该过程将很容易,数据库将提供不同的(并且可能更灵活)的安全性。

我真的不相信可变参数会成为问题:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多