1.创建存储过程
2.调用存储过程
3.存储过程体
4.语句块标签
1.in:向过程里传参
2.out:过程向外传参值
3.inout:既实现in又实现out in and out
SQL语句:先编译后执行
存储过程:
一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点:
存储过程是预编译的,而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用统一了接口,确保数据的安全
存储过程的创建和调用:
存储过程就是一段具有名字的代码,用来完成某个特定的操作创建的存储过程保存在数据库的数据字典中创建存储过程使用procedure关键字
创建表tb_stu并在表中插入如下数据:
+------+------+------+------------+| id | name | sex | birthday |+------+------+------+------------+| 2 | 小红 | 女 | 2008-07-06 || 1 | 小明 | NULL | NULL || 3 | 小明 | 男 | 2011-07-10 || 4 | 张三 | 男 | 2005-06-22 || 4 | 小黄 | 女 | 2007-04-22 || 4 | 李四 | 男 | 2001-06-29 |+------+------+------+------------+
示例:创建存储过程删除sex列为”男”的记录
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)mysql> create procedure delete_tb_stu(in p_sex varchar(255)) -> begin -> delete from tb_stu -> where sex = p_sex; -> end$$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ; #将语句的结束符号恢复为分号
解析:我们创建了一个叫delete_tb_stu的存储过程,内容被包括在begin…end语句块内,我们在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释(内容中的分号必须要)。
调用存储过程(call sp_name[(传参)];):
mysql> select * from tb_stu;+------+------+------+------------+| id | name | sex | birthday |+------+------+------+------------+| 2 | 小红 | 女 | 2008-07-06 || 1 | 小明 | NULL | NULL || 3 | 小明 | 男 | 2011-07-10 || 4 | 张三 | 男 | 2005-06-22 || 4 | 小黄 | 女 | 2007-04-22 || 4 | 李四 | 男 | 2001-06-29 |+------+------+------+------------+6 rows in set (0.00 sec)mysql> call delete_tb_stu("男");Query OK, 3 rows affected (0.00 sec)mysql> select * from tb_stu;+------+------+------+------------+| id | name | sex | birthday |+------+------+------+------------+| 2 | 小红 | 女 | 2008-07-06 || 1 | 小明 | NULL | NULL || 4 | 小黄 | 女 | 2007-04-22 |+------+------+------+------------+3 rows in set (0.00 sec)
存储内容体:
>存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等
>过程体格式:以begin开始,以end结束(可嵌套)
begin begin begin statements; end endend
存储过程的参数:
存储过程可以有0个或多个参数,用于存储过程的定义。
3种参数类型:
in输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)out输出参数:表示过程向调用者传出值(可以返回多个值,传出值只能是变量)inout输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
注意:即使过程没有参数,也必须在过程名后面加上小括号
删除存储过程:
mysql> drop procedure delete_tb_stu;Query OK, 0 rows affected (0.00 sec)
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/885.html