什么是存储过程?
存储过程是一组预先=编译好的sql语句集合,执行过的sql会暂存,之后再次执行该语句不需要重新编译。
好处:1.提高代码的复用度;2.简化操作;3.减少和数据库的连接次数。
坏处:坏处大于好处
存储过程就是省略上述过程中的语法分析和编译
这2个环节
一、基本语法
- 创建存储过程
-- 创建存储过程
SELECT PROCEDURE 存储过程名称(参数列表)
BEGIN
-- 方法体
END
- 存储过程的方法参数详解
-- 参数列别包含三部分:参数模式 参数名 参数类型
存储过程名称(IN username VARCHAR(5))
-
方法体
方法体内部的每条sql都需要以分号(;)结尾。
存储过程以DELIMITER $
结尾 -
调用存储过程
CALL 存储过程名(参数列表)
二、案例分析
1、空参 – 存储过程
定义存储过程
DELIMITER $$
CREATE PROCEDURE myp()
BEGIN
INSERT INTO user_p(`last_name`, `name`)
VALUES('aaa', 'bbb'),('ccc', 'ddd'),( 'ddd', 'fff');
END $$
调用存储过程
-- 调用也需要使用 DELIMITER 定义结束符号结尾
CALL myp(); $$
2、in模式 – 存储过程
定义存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS myp
CREATE PROCEDURE myp(IN username VARCHAR(10))
BEGIN
UPDATE user_p SET name = '更改姓名后的结果'
WHERE name = username;
END $$
调用存储过程
-- 调用也需要使用 DELIMITER 定义结束符号结尾
CALL myp('w.deng'); $$
3、out模式 – 存储过程
定义存储过程
CREATE PROCEDURE myp(IN username VARCHAR(10), OUT users VARCHAR(255) )
BEGIN
UPDATE user_p SET name = '更改姓名后的结果'
WHERE name = username;
SELECT `name` INTO users FROM user_p WHERE name = 'w.deng';
END $$
调用存储过程
-- 调用也需要使用 DELIMITER 定义结束符号结尾
CALL myp('ddd', @users); $$
查询out结果
SELECT @users $$
4、inout模式 – 存储过程
定义存储过程
CREATE PROCEDURE mm(INOUT a INT)
BEGIN
SET a=1 ;
END; $$
调用存储过程
-- 定义变量
SET @a = 10 $$
-- 调用存储过程
CALL mm(@a) $$
三、删除存储过程
DROP PROCEDURE IF EXISTS `存储过程名`
四、查看存储过程
SHOW CREATE PROCEDURE `存储过程名`