2

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

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

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

4

2 回答 2

4

那要看情况了。存储过程是一种处理功能分解的方法,如果您有多个应用程序与同一个数据库进行交互,它绝对是必不可少的。几年前,对所有事物都使用存储采购的想法正在兴起,随着世界转向服务/RAD 世界,他们正在失去一些优势。

存储过程的一些好处是

  1. 重用/这当然可以在您的代码库中完成,但它比编写具有 10 个子连接 15 次的相同查询更胜一筹

  2. 安全性 - 当 sp 盛行时,sql 注入攻击出现在最前面,减少暴露的一种方法是提供参数化 sp,在大多数情况下自动清理您的输入

  3. 真正大型数据库表布局的定义文档并不总是足以解释您存储的内容以及原因,并且 SP 有时会为您和之后的人提供预期的内容

  4. 定义的接口。

我认为所有这些专业人士都可以在良好的应用程序设计的前提下提供,并且只在一定程度上在一定规模的项目中制作场景。

一些缺点

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

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

于 2011-04-26T17:56:14.197 回答
0

这与问“我应该将代码分解为方法/函数/过程并调用它们还是应该将所有内容都编码到当前函数中”是同一个问题?

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

  1. 更容易测试。您可以在不运行应用程序的情况下测试存储过程。
  2. 更容易开发。您可以让 DB 开发人员编写存储过程,让 GUI 开发人员编写 UI 等。
  3. 更容易移植到不同的数据库。更改都包含在数据库中,与应用程序的合同(传递给存储过程的参数)不应更改。
  4. 从多个前端使用存储过程中的逻辑的能力。您不必在需要创建新客户的每个应用程序中编写相同的客户创建逻辑。

最大的缺点是您必须学习多个学科并且可能使用多种工具。这是在 .Net 中使用 Linq for SQL 的重要原因之一。您不必学习 SQL,所有内容都包含在 .Net 代码中。

我们对所有事情都使用存储过程。它工作得非常好。抽象是你的朋友。

于 2011-04-26T18:00:32.500 回答