mysql存储过程与mysql命令行工具的脚本

时间:2011-10-13 00:40:11

标签: mysql bash stored-procedures macros

我必须做很多批量计算,过滤数据,在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更适合编程。我在Stored Procs中看到的主要优点是速度,这在大多数时候都不是我的担忧。

2012年7月11日,我发表了评论:

  

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

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

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

然而,在程序中执行许多SQL语句比从Bash或PHP执行快得多,尤其是在存在循环时。

1 个答案:

答案 0 :(得分:2)

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

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

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

相关问题