【发布时间】: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