1、含义:一组预先编译好的sql语句的集合,可以理解成批处理语句
2、好处:提高sql语句的重用性、简化代码、减少了编译次数和数据库的连接次数,提高了效率
3、创建语法
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体
END
注意:
①、参数列表包含三部分
参数模式 参数名 参数类型
举例:
IN bookname varchar(20)
参数模式包含三种:
IN:该参数作为输入,也就是该参数需要调用方传入值
OUT:该参数作为输出,也就是该参数可以作为返回值
INOUT:该参数既可以作为输出又可以作为输入,也就是该参数既需要传入值,又可以返回值
②、如果存储过程体中仅仅有一句话,BEGIN END可以省去
③、存储过程体中的每条sql语句要求必须加分号结尾
④、存储过程的结尾可以使用DELIMITER设置
语法:DELIMITER 结束标记
举例:
DELIMITER $
4、调用语法
CALL 存储过程名(参数列表);
举例:
①、空参的存储过程
DELIMITER $
CREATE PROCEDURE p1()
BEGIN
INSERT INTO book(book_name) values('三国演义');
END $
CALL p1()$
②、带IN模式的存储过程
CREATE PROCEDURE p2(IN bookname varchar(20))
BEGIN
SELECT * FROM book WHERE book_name like bookname;
END $
CALL p2('三国演义') $
③、带OUT模式的存储过程(根据id查出书名,并输出)
CREATE PROCEDURE p3 (IN id INT,OUT bookname varchar(20))
BEGIN
SELECT b.book_name INTO bookname b WHERE b.id=id;
END $
CALL p3(1,@bName)$
SELECT @bName$
④、带INOUT模式的存储过程
传入a和b两个值,最终输出的结果翻倍
CREATE PROCEDURE p4(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END$
SET @m=10$
SET @n=4$
CALL(@m,@n)$
5、删除存储过程(一次只能删除一个)
DROP PROCEDURE p1
6、查看存储过程
SHOW CREATE PROCEDURE p4