为什么要用存储过程?
MySQL5.0 版本以后开始支持存储过程。
大多数 SQL 语句都是针对一个或多个表的单条语句。并非所有的操作都那么简单。经常会有一个完整的操作,需要多条语句才能完成。存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合。可将其视为批处理文件。虽然他们的作用不仅限于批处理。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
存储过程的优点
- 通过把处理封装在容易使用的单元中,简化复杂的操作;
- 简化对变动的管理。如果表名、列名或业务逻辑有变化。只需要更改存储过程的代码,使用它的人员不会改自己的代码;
- 存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的 SQL 语句,而只用发送存储过程的名称和参数;
- 存储的程序是安全的。数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。
Mysql创建存储过程语法与解释
Navicate创建存储过程语法:
CREATE PROCEDURE mypro(IN a INT,IN b INT,OUT sums INT)
BEGIN
SET sums=a+b;
END
SQLyog创建存储过程语法:
DELIMITER//
CREATE PROCEDURE mypros(IN a INT,IN b INT,OUT sums INT)
BEGIN
SET sums=a+b;
END;//
存储过程语法解析
➢ create procedure 用来创建过程;
➢ mypro 用来定义过程名称;
➢ (in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值;
➢ begin 与 end 表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;
➢DELIMITER//SQLyog默认情况是以;来结束的,通过设置DELIMITER//可以定义开始与结束,Navicate默认是拥有Delimiter的。
变量的使用
- 变量定义
DECLARE variable_name [,variable_name…] datatype [DEFAULT value];
➢ declare 用于声明变量;
➢ variable_name 表示变量名称;
➢ datatype 为 MySQL 的数据类型;
➢ default 用于声明默认值;
➢ 例如:declare name varchar(20) default ‘jack’。 - 变量赋值
SET 变量名 = 表达式值 [,variable_name = expression …]
流程控制语句
1、IF 语句包含多个条件判断,根据结果为 TRUE、FALSE 执行语句,与编程语言中的 if、else if、else 语法类似。例如:
输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:
– 创建过程
create procedure mypro2(in num int)
begin
if num<0 then – 条件开始
select ‘负数’;
elseif num=0 then
select ‘不是正数也不是负数’;
else
select ‘正数’;
end if;-- 条件结束
end;
– 调用过程
call mypro2(-1);
2、case 是另一个条件判断的语句,类似于编程语言中的 choose、when 语法。MySQL 中的 case 语句有两种语法格式。例如:
输入一个整数,使用 case 语句判断是正数还是负数,代码如下所示:
– 创建过程
create procedure mypro3(in num int)
begin
case – 条件开始
when num<0 then select ‘负数’;
when num=0 then select ‘不是正数也不是负数’;
else select ‘正数’;
end case; – 条件结束
end;
– 调用过程
call mypro3(1);
3、while 语句的用法和 java 中的 while 循环类似。例如:
定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:
– 创建过程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<10 do – 循环开始
set num = num+1;
set sum = sum+num;
end while; – 循环结束
end;
– 调用过程
call mypro5(@sum);
– 查询变量值
select @sum;
存储过程的管理
1、显示所有库的存储过程 :SHOW PROCEDURE STATUS;
2、显示特定数据库的存储过程:SHOW PROCEDURE status where db = ‘schooldb’;
3、显示名称中包含“my”的存储过程:SHOW PROCEDURE status where name like ‘%my%’;
4、显示存储过程源码:SHOW CREATE PROCEDURE mypro1;
5、删除存储过程 :drop PROCEDURE mypro1;