1、存储过程:保存1条或多条SQL语句的集合(类似批文件),实际上是一种函数
创建存储过程一般管理员权限,普通用户使用。
2、为什么要有存储过程:需要用到不止1条语句,涉及不止1张表
语句是否执行以及次序不是固定的
比如,为了处理订单需要核对库存中是否有相应的物品;如果有,就需要选中被预定以防再给其他人库存数量也要相应修改;如果没有,需要订购,这又会去查找供应商表;最终检查库存的结果需要返回给客户。
3、好处:简化复杂操作
防止错误,保证了数据完整性
快
简单、安全、高性能
4、创建存储过程
CREATE PROCEDURE xxx() #()是可能带参数
BEGIN
XXXXX;
XXXX
END;
1)过程创建前先修改命令行的语句分隔符默认是分号,不改会导致在BEGIN内的语句第一次遇到分号就被认为输入结束
否则会报错:
最后改回来:
2)创建无参数过程无参数的procedure
3)创建有参数过程有参数的procedure,OUT关键字表示一个值从存储过程出
DECIMAL(8,2) 定长8位,其中小数点2位
关键字:OUT 从存储过程出
IN 从存储过程进
INOUT 从存储过程进、出参数一个IN,一个OUT
5、执行存储过程
CALL ordertotal(20005, @total);无参数有参数,CALL的执行是把数值放在变量里,查看数值需要SELECT 变量
注意MYSQL变量都已@开始。IN参数直接给数值,OUT参数给变量,变量以@开头
6、删除存储过程
DROP PROCEDURE IF EXISTS xxx; #不带()
7、检查存储过程
SHOW CREATE PROCEDURE xxx;
SHOW PROCEDURE STATUS;(特别长)
SHOW PROCEDURE STATUS LIKE “xxx”;SHOW PROCEDURE STATUS LIKE “ordertotal”限定过滤模式
8、创建一个比较复合的存储过程:
总计某订单的总金额,其中总金额是否包含税费 是可选参数 。
其中,
1)DECLARE total声明局部变量total,最后SELECT total INTO ototal,存入OUT ototal中。
2)comment结果将在show procedure status中显示:
调用1:boolean为0
调用2:boolean为1