目录
1. 用途:
存储过程广泛存在于一些遗留系统,可以减少代码的编写。而近些年,存储过程很少再用于数据库中,个人认为大概有以下2个原因
1)存储过程并不适用于所有的数据库,例如oracle于mysql就不同,而程序写在代码中确是通用的。
2)存储过程在程序中是比较影响数据库性能,而把逻辑放在应用确是非常利于扩展的。
2. 相关语法
2.1 创建存储过程
2.1.1 语法
CREATE PROCEDURE 存储过程名 ([ IN | OUT | INOUT] 参数名称 类型 ...)程序体
参数含义:
IN 表示输入的参数,存储过程只是读取这个参数的值。如果没有定义参数种类,默认就是 IN,表示输入参数。
OUT 表示输出的参数,存储过程在执行的过程中,把某个计算结果值赋给这个参数,执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了
INOUT 表示这个参数既可以作为输入参数,又可以作为输出参数使用
类型: mysql的字段类型
2.1.2 示例
创建一个存储过程:往商品表插入100条数据
delimiter ;;
create procedure insertGoodData()
begin
declare i int;
set i=1;
while(i<=100)do
INSERT INTO `ys_t1`.`t_good`( `good_name`) VALUES ( concat('松子',i));
set i=i+1;
end while;
end;;
delimiter ;
商品表结构:非常简单
CREATE TABLE `t_good` (
`good_id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',
`good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',
PRIMARY KEY (`good_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
说明:
1) delimiter ;; 语句, 把 SQL 语句的分隔符改为“;;”,因为存储过程中包含很多 SQL 语句,如果不修改分隔符的话,MySQL 会在读到第一个 SQL 语句的分隔符“;”的时候,认为语句结束并且执行,这样就会导致错误。
2) create procedure insertGoodData()语句,声明创建一个存储过程
3) begin和 end 关键字把存储过程中的 SQL 语句包裹起来,形成存储过程的程序
4)delimiter ;语句,把 SQL 语句的分隔符改为“;”
2.2 查看存储过程
语句查看:例如查看上边创建的insertGoodData()存储过程,如下
SHOW CREATE PROCEDURE insertGoodData
管理软件如navicat,可在如下位置查看:
2.3 调用存储过程
调用语句如下:
call 存储过程名称;
示例:call insertGoodData();
2.4 修改存储过程
在navicat的管理页面如下,右击选择设计函数:
可以在弹出的窗口中进行修改,然后点击保存即可,如下图。
2.5 删除存储过程
DROP PROCEDURE 存储过程名称;
例如:drop procedure insertGoodData;
本次分享至此。