1、什么是存储过程
在我看来,存储过程类似于我们编程中的过程或函数。由多条SQl语句来实现一个比较复杂的功能。
2、作用
1)通过把处理封装在容易使用的单元中,简化复杂的操作
2)通过把处理封装在容易使用的单元中,简化复杂的操作。像接口一样,所有的开发人员和应用程序调用相同的存储过程,保证了数据安全和统一
3)简化对变动的管理。如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。通过存储过程限制对基础数据的访问减少
4)提高性能。因为使用存储过程比使用单独的SQL语句要快
3、创建
CREATE PROCEDURE [过程名](参数) //没有参数也要写()
参数修饰 IN:传入存储过程的参数; OUT:传出存储过程的参数; INOUT:传入和传出的存储过程参数
一个不带参数的例子:
CREATE PROCEDURE PRO_AvgPrice()
BEGIN
SELECT Avg(prod_proice) AS AvgPrice
FROM products
END;
一个带参数的例子:
CREATAE PROCEDURE PRO_Price(
OUT Pl DECIMAL(8,2),
OUT Ph DECIMAL(8,2),
OUT Pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price) INTO Pl FROM products;
SELECT Max(prod_price) INTO Ph FROM products;
SELECT Avg(prod_price) INTO Pa FROM products;
END;
DECIMAL(8,2):
注意的是decimal(8,2)总长8位,包括1位小数点和2为小数,也就是说8-1-2=5 整数位只有5位 如 12345.21
4、调用
CALL PRO_AvgPrice();
CALL PRO_Price(@priceLow, @priceHigh, @priceAverage); //变量都必须以@开始。
可显示
SELECT @priceLow, @priceHigh, @priceAverage;
5、删除存储过程
DROP PROCEDURE PRO_AvgPrice //删除不存在的存储过程将报错
DROP PROCEDURE PRO_AvgPrice IF EXISTS
6、显示存储过程的创建语句
SHOW CREATE PROCEDURE PRO_Price;
7、显示所有的存储过程的状态列表,可获得存储过程创建的时间,由谁创建等信息
SHOW PROCEDURE STATUS
8、显示部分存储过程的状态列表
SHOW PROCEDURE STATUS LIKE 'PRO_Price';