存储过程
一组预先编译好的SQL语句的集合,理解成批处理语句。用户可通过指定存储过程的名字并给定参数来调用执行
作用:
1、封装,提高代码的重用性,简化操作
2、统一接口,确保数据的安全
3、减少编译次数并减少了和数据库服务器的连接次数,提高了效率
(1)创建存储过程:
存储过程就是具有名字的一段代码,用来完成一个特定的功能。
创建的存储过程保存在数据库的数据字典中
CREATE PROCEDURE 存储过程名([proc_parameter][,...]) [characteristic...]
BEGIN
存储过程体(一组合法的SQL语句)
END
例如:
DELIMITER $$ # #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE delete_girl (IN girl_name CHAR(20))
BEGIN
DELETE FROM girls
WHERE girl_name=NAME;
END$$
DELIMITER ; #将语句的结束符号恢复为分号
CALL delete_girl("jennie"); # 调用
说明:
1.默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;
2.在定义过程时,使用DELIMITER 命 令 将 语 句 的 结 束 符 号 从 分 号 ; 临 时 改 为 两 个 命令将语句的结束符号从分号 ; 临时改为两个 命令将语句的结束符号从分号;临时改为两个,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。
3.如果存储过程是一句话,begin end可以省略。
4.存储过程体中的每条sql语句的结尾要求必须加分号
存储过程参数proc_parameter:
in/out/inout | param_name | type |
---|---|---|
参数模式 | 参数名 | 参数类型 |
in: 作为输入,需要调用方传入值(传入值可以是字面量或变量)
out: 作为输出,可以作为返回值(可以多个返回值,传出值只能是变量)
inout: 既可以作输入也可以作输出, 也就是改参数既需要传入值,又可以返回值(值只能是变量)
例如:
参考:https://www.cnblogs.com/geaozhang/p/6797357.html
(2)调用存储过程:
call 存储过程名(参数列表)
(3)修改存储过程:
alter procedure 存储过程名 [charactristic…]
(4)删除存储过程:
drop procedure [if exits] 存储过程名
(5)查看存储过程:
-
查看存储过程的状态:
show procedure status like 函数名
-
查看存储过程的定义:
show create procedure 函数名
-
通过查看information_schema.routines了解存储过程的信息
select * from routines where rounies_name=存储过程名