MySQL进阶8

存储过程:

一组可编程的函数,是为了完成特定功能的sql语句集mysql

经编译建立并保存在数据库中,用户可经过指定存储过程的名字并给定参数(须要时)来调用执行sql

存储过程就是具备名字的一段代码,用来完成一个特定的功能数据库

建立的存储过程保存在数据库的数据字典中express

 

用存储过程的好处:

将重复性很高的一些操做封装到一个存储过程当中简化了对这些sql的调用编程

批量处理安全

统一接口,确保数据安全服务器

相对于oracle数据库来讲,mysql的存储过程相对功能较弱,使用较少oracle

 

存储过程的建立和调用:

delimiter $$:

它与存储过程语法无关函数

delimiter语句将标准分隔符-分号(;)更改成$$工具

由于咱们想将存储过程做为总体传递给服务器,而不是让mysql工具一次解释每一个语句

告诉mysql解释器,该段命令是否已经结束了,mysql是否能够执行了,默认状况下delimiter是分号;,在命令行客户端中若是有一段命令以分号结束那么回车后mysql将会执行该命令,但有时候不但愿mysql这么作,在位可能输入较多的语句且语句中包含有分号,使用delimiter $$,这样只有当$$出现以后mysql解释器才会执行该段语句

 

建立存储过程:

create procedure 名称() begin 语句 end $$

 

调用存储过程:

call 名称();

 

删除存储过程:

drop procedure 名称;

 

存储过程变量:

在存储过程当中声明一个变量

 

使用declare语句:

declare 变量名 数据类型(大小) default 默认值;

能够声明一个名为total_sale的变量,数据类型为int,默认值为0

declare total_sale int default 0;

声明共享数据类型的两个或多个变量

declare x, y int default 0;

 

分配变量值:

要为变量分配一个值,可使用set语句

set total_count = 10;

使用select into语句将查询的结果分配给一个变量

select count(*) into total_products from products;

 

变量的范围:

若是在存储过程当中声明一个变量,那么当达到存储过程的end语句时,它将超出范围,所以在其余代码块中没法访问

 

存储过程参数:

三种类型:

in:表示调用者向过程传入值(传入值能够是字面或变量)

 

 out:表示过程向调用者传出值

inout:inout参数是in和out参数的组合

 

定义参数:

create produce name(模式,参数名称 数据类型(大小))

 

存储过程语句:

if语句:

if expression then statements; end if;

if expression then statements; else else_statmemts; end if;

 

case语句:

case case_expression when when_expression_1 then commands when when_expression_2 then commands ... else commands end case;

 

循环:

while expression do statments end while

repeat statments; until expression end repeat

 

查看存储过程:

查看全部存储过程:

show procedure status;

查看指定数据库的存储过程

show procedure status where db=数据库名;

查看指定存储过程源代码

show create procedure 存储过程名;