MySQL中的存储函数 - 值得做什么?

时间:2011-04-26 17:37:28

标签: php mysql stored-procedures stored-functions

当我第一次进入数据库时​​,我使用的是SQL Server。我最初使用经典的ASP进入了那个。我们被告知的一件大事是,如果您使用存储过程,而不是使用ASP SQL命令(我认为“在线”),您在SQL事务中节省了大量时间。所以几乎我曾经想用数据库编写的所有内容都为我编写了存储过程,然后从我的代码中调用了存储过程。

无论如何,快进几年,我现在正在完成PHP和MySQL(以及一点Python)的所有工作。我似乎没有看到太多的东西是人们使用存储过程/函数,所以我并没有真正担心它。

但是,我发现我只是做错了而没​​有意识到这一点。在MySQL中使用存储函数有一个主要优势吗?我正在建立一个相当大的网站来处理大量的数据库调用。这些调用都是在我的PHP代码中完成的。我是否会更好地使用存储函数进行一致的调用,然后只是将变量传递给PHP中的函数?

3 个答案:

答案 0 :(得分:4)

那取决于。存储过程是处理功能分解的一种方法,如果您有多个应用程序与同一数据库交互,则这些方法绝对必不可少。几年前使用存储采购的想法一直处于优势地位,随着世界转向服务/ RAD世界,他们正在失去一些基础。

存储过程的一些好处是

  1. 重用/这肯定可以在你的代码库中完成,但它打败了用10次子连接写15次相同查询的地狱

  2. 安全性 - 当sp是愤怒的sql注入攻击来到前面时,减少暴露的一种方法是提供参数化的sp,在大多数情况下自动清理你的输入

  3. 根据定义对真正大型数据库表格布局的文档并不总是足以解释您存储的内容以及为什么并且SP有时会为您提供以及那些追随您的内容

  4. 已定义的界面。

  5. 我认为所有这些专业人员都可以在假设良好的应用程序设计的情况下提供,并且只在某种程度上的项目中进行一定程度的场景。

    一些缺点

    1. 冗余功能 - 我见过很多商店,其中业务和crud逻辑在应用程序中传播,业务逻辑在数据库中。

    2. SP上缺乏配置管理 - 虽然已有既定的代码SP管理程序和工具,但远远落后。

答案 1 :(得分:0)

据我了解,您所选语言中的存储过程和准备好的语句通常在计算上是等效的。

无论我如何回应,这是一个神圣的战争问题,在此之前已经被打死了:MySQL Stored Procedure vs. complex query

答案 2 :(得分:0)

这是一个问题,问:“我应该将我的代码分解为方法/函数/过程并调用它们,还是应该将所有代码编入我当前的函数中?”

存储过程为您提供的一些优势:

  1. 更容易测试。您可以在不运行应用程序的情况下测试存储过程。
  2. 更容易开发。您可以让DB开发人员编写存储过程,GUI开发人员编写UI等。
  3. 更轻松地移植到其他数据库。这些更改都包含在数据库中,与应用程序的合同(传递给存储过程的参数)不应更改。
  4. 从多个前端使用存储过程中的逻辑的能力。您不必在每个需要创建新客户的应用程序中编写相同的客户创建逻辑。
  5. 最大的缺点是你必须学习多个diciplines并且可能使用多种工具。这是在.Net中使用Linq for SQL的一个重要原因。您不必学习SQL,所有内容都包含在.Net代码中。

    我们使用存储过程来处理所有事情。它非常好用。抽象是你的朋友。