存储过程
1、什么是存储过程
是数据库一个重要的功能,是为了以后使用保存一条或者多条MySQL语句的集合。
存储过程思想上就是数据库sql语言层面代码的封装与重用。
2、为什么使用存储过程
a. 把处理封装在容易使用的单元中,简化操作
b. 防止错误 保证了数据一致性
c. 简化对变动的管理(修改对应的表名、列名等 修改对应存储过程的代码,对于使用的人不需要知道变化)
d. 提高性能
e. 灵活
总结:简单 、安全、高性能
MySQL在5.0开始支持存储过程
存储过程的格式
-- 存储过程的语法结构
-- CREATE PROCEDURE 过程名称([过程的参数[....]]) [特性...] 过程体
-- DELIMTER // // DELIMTER; 分隔符
CREATE PROCEDURE showStudent(OUT stucount int)
BEGIN
SELECT COUNT(1) INTO stucount FROM student;
END
SET @stucount = 1;# 声明变量 需要以@开头
CALL showStudent(@stucount);# 执行存储过程
SELECT @stucount;# 查询结果
3、注意:
a、DELIMTER // 和// DELIMTER,这两句是分割符的意思,因为mysql默认以;为分割符,如我们没有声明分隔符(DELIMTER )那么编译器会把存储过程当做SQL语句来进行处理,则存储过程就报错了,所以要实现使用DELIMTER 关键字申明 当前字段分隔符,这样MySQL才会将 ‘;’ 当做存储过程中的代码。
b、存储过程根据需要可能会有 输入 输出,输入输出参数,这里就有一个输出参数stucount 类型是int类型的如果有多个参数需要 ‘,’隔开
c、过程体的开始与结束需要BEGIN和END
参数:
mysql存储过程共有三种参数的类型 - - - IN、OUT、INOUT
使用语法:
CREATE PROCEDURE 参数名称((IN、OUT、INOUT) 参数名称 数据类型)
IN :输入参数-表示改参数的值 必须在调用存储过程时指定,在存储过程中改参数的值不能被返回
-- IN参数的使用
CREATE PROCEDURE demo_in_par(in p_in INT)
BEGIN
SELECT p_in;
SET p_in=2;
SELECT p_in;
END;# 存储过程的创建
-- 执行 查看结果
SET @p_in=1;
CALL demo_in_par(@p_in)
SELECT @p_in # 查询变量的值 结果没有发生改变
OUT:输出参数-该值可在存储过程中内部被改变 ,并可以返回
-- OUT参数的使用
CREATE PROCEDURE demo_out_par(OUT p_out INT)
BEGIN
SELECT p_out;
SET p_out=2;
SELECT p_out;
END;# 存储过程的创建
-- 执行 查看结果
SET @p_out=1;
CALL demo_out_par(@p_out);
SELECT @p_out; # 查询变量的值 结果发生改变
INOUT:输入输出参数-调用时指定,并且可以被改变和返回
-- INOUT参数的使用
CREATE PROCEDURE demo_inout_par(INOUT p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;