之前我们已经学习了 SQL 的很多基础知识,最后一起看一下存储过程和函数,这也是此系列的最后一篇。数据库系统有了存储过程和函数,才真正具备了编程的能力。
知识要点
存储过程
存储过程和函数的区别
存储过程和函数定义
存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines。
虽然存储过程和函数可以简化应用开发难度和提升数据处理效率,但是存储过程本身比较复杂,对于应用后期维护和数据库迁移升级并不友好。对于是否应该采用存储过程,可以看文章Business Logic: To Store or not to Store that is the Question?中进行了详细分析和讨论。就我个人来说:在应用业务开发的时候,是很少使用存储过程和函数的,有时是甚至是禁止使用;往往是在在编写数据库升级脚本时使用存储过程和函数。
存储过程和函数
创建语法:
特征值的部分进行简单的说明:
说明下面过程的 BODY 是使用 SQL 语言编写,这条是系统默认的,为今后 MySQL 会支持除 SQL 外的其他语言的存储过程而准备
确定的,即每次输入一样输出也一样的程序
非确定的,默认是非确定的。当前,这个特征值还没有被优化程序使用。
这些特征值提供子程序使用数据的内在信息,这些特征值目前只是提供给服务器,并没有根据这些特征值来约束过程实际使用数据的情况
表示子程序不包含读或写数据的语句,没有明确指定时的默认值
表示子程序不包含 SQL 语句
表示子程序包含读数据的语句,但不包含写数据的语句
表示子程序包含写数据的语句。
可以用来指定子程序该用创建子程序者的许可来执行,还是使用调用者的许可来执行。默认值是 DEFINER
存储过程或者函数的注释信息
详细的 SQL 语法说明,请参考 《MySQL 官方文档》 。
MySQL 的存储过程和函数中允许包含 DDL 语句,也允许在存储过程中执行提交(Commit,即确认之前的修改)或者回滚(Rollback,即放弃之前的修改),但是存储过程和函数中不允许执行 语句。此外,存储过程和函数中可以调用其他的过程或者函数
通常我们在执行创建过程和函数之前,都会通过 命令将语句的结束符从 修改成其他符号,这里使用的是 ,这样在过程和函数中的 就不会被 MySQL 解释成语句的结束而提示错误。在存储过程或者函数创建完毕,通过 命令再将结束符改回成
调用存储过程
调用函数
查看存储过程或者函数的状态
查看存储过程或者函数的定义
通过查看 了解存储过程和函数的信息
删除存储过程或函数
变量的使用
存储过程和函数中可以使用变量,变量是不区分大小写的
通过 可以定义一个局部变量,该变量的作用范围只能在 块中,可以用在嵌套的块中。变量的定义必须写在复合语句的开头,并且在任何其他语句的前面。可以一次声明多个相同类型的变量。如果需要,可以使用 赋默认值
定义一个变量的语法如下:
直接赋值使用 SET,可以赋常量或者赋表达式,具体语法如下:
也可以通过查询将结果赋给变量,这要求查询返回的结果必须只有一行,具体语法如下:
定义条件和处理
条件的定义和处理可以用来定义在处理过程中遇到问题时相应的处理步骤
条件的定义
条件的处理
: 表示继续执行下面的语句, 则表示执行终止
的值可以是通过 定义的 ,可以是 的值或者 的值或者 、、,这 3 个值是 3 种定义好的错误类别,分别代表不同的含义:
是对所有以 01 开头的 代码的速记
是对所有以 02 开头的 代码的速记
是对所有没有被 或 捕获的 代码的速记
领取专属 10元无门槛券
私享最新 技术干货