SQL学习十六、使用存储过程
在数据库的处理中经常会有一些复杂的操作需要多条语句才能完成,就以电商购物为例,我们处理订单的流程
1、处理订单第一步,检查库存中是否有对应的商品
2、如果物品有库存,需要预定,不再出售给别的人,并且减少物品数据 以反映正确的库存量
3、如果库存中没有的物品,则需要订购,这需要与供应商进行某种交互
4、当商品入库的时候,哪些等待的订单可以立即发货,并通知客户
这里面的逻辑需要针对许多表的多条 SQL语句进行处理,而且执行具体的 SQL语句及其次序也不是固定的,会根据库存的影响而变化。
那么我们在实际生产中怎么处理这个问题呢?
单独编写每条 SQL语句,并根据结果有条件地执行其他语句。在每次需要这个处理时(以及每个需要它的应用中), 都重新做一遍这些工作?
答案是,我们可以使用存储过程。
简单来说,存储过程就是为以后使用而保存的一条 或多条 SQL语句。可将其视为批文件,虽然它们的作用不仅限于批处理。
为什么要使用存储过程?
- 好处 -- 简单、安全、高性能
1、把处理封装在一个易用的单元中,可以简化复杂的操作
2、保证数据的一致性、防止错误,因为封装好了一系列的处理步骤,而不要求反复建立,所以当所有开发人员和应用程序都使用同一存储过程时,他们所使用的代码都是相同的。 这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。
3、简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变 化,那么只需要更改存储过程的代码。使用它的人员甚至不需要知道 这些变化。 这一点的延伸就是安全性。通过存储过程限制对基础数据的访问,减 少了数据讹误(无意识的或别的原因所导致的数据错误)的机会。
4、因为存储过程通常以编译过的形式存储,所以 DBMS处理命令所需的 工作量少,提高了性能。
- 不足
1、不同 DBMS中的存储过程语法有所不同,这就造成编写真正的可移植存储过程几乎是不可能的。
但是也可以保证相对的可移植性,至少客户端的代码不用修改。
2、编写存储过程比编写基本 SQL语句复杂,需要更高的技能, 更丰富的经验。因此,许多数据库管理员把限制存储过程的创建作为 安全措施。
DBMS 的支持
学习的例子是 Oracle和 SQL Server的语法,
SQLite 不支持存储过程
关于存储过程的创建及使用(未完待续.....)