存储过程和函数:类似java中的方法,
好处:
- 提高代码的重用性
- 简化操作
- 减少了编译次数并且减少了数据库服务器的连接次数,提高了效率
存储过程
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
创建
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
END
注意:
- 参数列表包含:参数模式 参数名 参数类型
IN stuname VARCHAR(20)
参数模式:
IN:需要调用方输入值
OUT :该参数可以作为返回值
INOUT:该参数既可以作为输入,也可以作为输出 - 如果存储过程只有一句话,BEGIN END可以省略。每条SQL语句结尾必须加分号。
语句分隔符的设置:DELIMITER 分隔符
,则存储过程结束时使用END 分隔符
。恢复为原来的语句分隔符:DELIMITER ;
调用
CALL 存储过程名(实参列表);
删除
DROP PROCEDURE 存储过程名;
- 仅当存在时删除:
DROP PROCEDURE IF EXISTS;
举例
先建了个表
NEW TABLE product(
prod_name VARCHAR(20),
prod_price INT);
插入数据
INSERT INTO product VALUES('玩具车',200);
INSERT INTO product VALUES('飞机模型',800);
INSERT INTO product VALUES('拼图',60);
创建存储过程(注意!MySQL一定要用 DELIMITER 修改分隔符,不然报错!)
DELIMITER //
CREATE PROCEDURE productpricing(
OUT pl DECIMAL(8,2),--DECIMAL十进制小数
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2),
)
BEGIN
SELECT MIN(prod_price)
INTO pl--INTO代表保存到的变量
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT AVG(prod_price)
INTO pa
FROM products;
END//
DELIMITER ;--还原分隔符
调用存储过程(这条语句并不显示任何变量)
CALL productpricing(
@pricelow,--所有MySQL变量必须以@开始
@pricehigh,
@priceaverage);
检索得到的变量
SELECT @pricehigh,@pricelow,@priceaverage;
检查存储过程
- 显示创造存储过程的语句:
SHOW CREATE PROCEDURE 存储过程名;
- 显示何时、何人创建等详细信息:
SHOW CREATE PROCEDURE STATUS LIKE '存储过程名';