MySQL中的其他特性
MySQL存储过程
Mysql存储过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,在需要时直接调用。
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。
存储过程就像脚本语言中函数定义一样。
例如以下的情形。
- 为了处理订单,需要核对以保证库存中有相应的物品。
- 如果库存有物品,需要预定以便不将它们再卖给别的人, 并减少可用的物品数量以反映正确的库存量。
- 库存中没有的物品需要订购,这需要与供应商进行某种交互。
执行这个处理需要针对许多表的多条MySQL语句。可能需要执行的具体语句及其次序也不是固定的。
那么,怎样编写此代码?可以单独编写每条语句,并根据结果有条件地执行另外的语句。
在每次需要这个处理时(以及每个需要它的应⽤中)都必须做这些工作。
为了方便处理,可以创建存储过程。
存储过程的优点:
- 可以把一些复杂的sql进行封装,简化复杂操作
- 保证了数据的完整性,防止错误
- 简单的变动只需要更改存储过程的代码即可
- 提高性能。因为使用存储过程比使用单独的SQL语句要快。(预先编译)
存储过程的缺点:
- 业务逻辑不要封装在数据库里面,应该由应用程序(JAVA、Python、PHP)处理。
- 让数据库只做它擅长和必须做的,减少数据库资源和性能的消耗。
- 维护困难,大量业务逻辑封装在存储过程中,造成业务逻辑很难剥离出来。动A影响B。
- 人员也难招聘,因为既懂存储过程,又懂业务的人少。使用困难。
在电信、银行行业、金融方面以及国企都普遍使用存储过程来熟悉业务逻辑,但在互联网中相对较少。
创建存储过程
\d //
将MySQL默认的语句结尾符;
修改为//
创建语句:
create procedure
BEGIN和END语句用来限定存储过程体
-- 定义存储过程
\d //
-- 创建存储过程p1()
create procedure p1()
begin