【问题标题】:[MySQL]: Stored Procedure's and select statements[MySQL]:存储过程和选择语句
【发布时间】:2011-01-07 21:43:33
【问题描述】:

我现在正在研究存储过程。

根据mysql网站dev部分的this文章(第8页)...

通常情况下,放 存储中的 SELECT 语句 程序,这是为了说明。 我决定一些程序应该 只需从我们的表中选择,这样 当您调用该程序时,它将是 很明显它正在工作。

这是为什么呢?

使用存储过程来简化复杂的选择语句不是“最佳实践”吗?

在哪些特定情况下使用存储过程是有益的?例子?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    通常存储过程用于数据库中的复杂处理。关于它们的好处存在激烈的争论。我从未见过存储过程中的 SELECT 是一件坏事,但我也不希望必须编写的每条 SQL 语句都进入存储过程。它应该保留给那些涉及多个语句并且必须重复执行的处理。

    Jeff 对他们大发雷霆here

    为了回答您对具体示例的直接问题,我发现由于可移植性问题而避免使用它们。我试图做我所有的处理应用程序方面。同时,我不必担心应用程序中的网络带宽,因此每种情况都不同。

    【讨论】:

    • 我的印象是存储过程比应用程序驱动的查询更便携。只要您可以将查询逻辑与应用程序分开。
    • 但它们是用 DBMS 自己的语言编写的。 SQL Server 的存储过程是用 T-SQL 编写的,Oracle 是用 PL/SQL 等编写的。您不能将数据库从一个平台移动到另一个平台。对于一些没什么大不了的组织,但对于其他组织......
    • 绝对正确...从一个数据库系统到下一个数据库系统的可移植性是有风险的。我链接的 pdf 概述了您应该避免的一些特定于 mysql 的语法/功能(以及其他一些约定),以便在非基于 mysql 的数据库上维护兼容性问题。但是,如果我没记错的话,存储过程促进了从一种语言到另一种语言的可移植性。
    【解决方案2】:

    使用存储过程/例程的一个特定情况是它可以提供类似于 OO 范例中函数的参数错误检查。它增加了“封装”

    一个简单的例子:

    CREATE PROCEDURE select_table(IN @id INT)
    BEGIN
      IF @id < O THEN
        -- ERROR!  do something here
      ELSEIF
        SELECT * from TABLE WHERE id = @id;
      END IF
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多