MySQL入门之存储过程与存储函数

-------------------------------------------------------------------------------------------------------------

教程大纲:

http://blog.csdn.net/qq78442761/article/details/76018310

-------------------------------------------------------------------------------------------------------------


存储过程

存储过程的特点:

1.可增强SQL语言的功能和灵活性

2.良好的封装性

3.高性能

4.可减少网络流量

5.存储过程可以作为一种安全机制来确保数据库的安全性和数据的完整性

创建存储过程

将mysql结束符修改为两个叹号再修改回来

MySQL入门之存储过程与存储函数


给test_1中创建一个存储过程,用于实现给定表customers中一个cust_id 即可修改表中该客户的性别为一个指定的性别

MySQL入门之存储过程与存储函数

注意:创建存储过程必须具有create routine权限

查看数据库中存在哪些存储过程

MySQL入门之存储过程与存储函数


查看某个存储过程的具体信息

MySQL入门之存储过程与存储函数


存储过程体

1.局部变量

a) 声明局部变量用于存储存储过程中的临时结果

b) 使用declare

c) 只存在于begin end 中

d) 必须在存储过程体的开头处声明

e) 用户变量要用@,用户变量存在于整个会话中

下面演示申请局部变量

MySQL入门之存储过程与存储函数


Set语句

在存储变量中使用set语句为局部变量赋值,如下操作

MySQL入门之存储过程与存储函数

Select  into 语句

把选定列的值直接存储到局部变量中

语法如下

Select col_name into var_name table_expr

1.col_name:指定列名

2.Var_name:用于指定要赋值的变量名

3.Table_expr:表示select语句中的from子句

4.返回结果只有一行数据

 

流程控制语句

1.条件判断语句 

if search_condition then statement_list

[elseif search_condition then statement_list]

[else statement_list]

End if

1.search_condition:用于指定判断的条件

2.Statement_list:用于包含了一条或多条的SQL语句

Case语句

Case case_value

When when_value then statement_list

[when when_value then statement_list]

[else statement_list]

End case

或者

Case

When search_condition then statement_list

[when search_condition then statement_list]

[else statement_list]

End else

一般使用第二种方法

 

循环语句

常用的循环语句有 while,repeat(复述),loop(环-跳转)

下面先介绍while语句

[begin_label:]while search_condition DO

Statement_list

End while[end_label]

1.首先判断search_condition是否为真 为真则循环

2.Begin_label和end_label是whlie语句的标注,名字必须相同并且成对出现

 

Repeat语句

[begin_label:]repeat

Statement_list

Until search_condition

End repeat[end_label]

1.repeat语句首先执行statement_list语句

2.Search_condition是否为真

3.可以使用begin_label和end_label进行标注

4.Repeat类似于do循环,先执行再判断

Loop语句

[begin_label:]loop

Statement_list

End loop[end_label]

1.可用begin_label和end_label进行标注

2.使用leave语句循环才退出

 

游标

1.游标是一个被select语句检索出来的集合

2.5.0之后的版本才会有

3.只用于存储过程

4.游标是结果,不是语句

下面说明语法

游标声明

1.declare cursor_name cursor for select_statement

2.Select_statement:指定一个select语句,其会返回多行数据,记住不能有into

打开游标

1.在5.5以后的版本中才有

2.Open cursor_name

读取游标

1. mysql5.5以后的版本才会有

2. Fetch cursor_name into var_name

3. Var_name:用于存放指定数据的变量名

关闭游标

1.在5.5之后的版本才有

2.Close cursor_name

3.如果没有明确关闭游标,mysql在end的时候会自动关闭

下面举一个例子

在test_1中创建一个存储过程,用于计算表customers1中的数据行的行数

MySQL入门之存储过程与存储函数


调用存储过程sp_sumofrow进行调用再查看存储过程sp_sumofrow后的结果

MySQL入门之存储过程与存储函数


调用存储过程

我们先创建一个存储过程

MySQL入门之存储过程与存储函数


下面我们先查看一下customers1表


MySQL入门之存储过程与存储函数


现在来调用并查看存储过程

MySQL入门之存储过程与存储函数


修改存储过程

用alter procedure修改部分,但一般是先删除在创建

 

删除存储过程 


MySQL入门之存储过程与存储函数



存储函数

1.与存储过程十分相似

2.不能拥有输出函数

3.可以直接调用,不需要call语句

4.必须包含一个return语句

下面来创建一个存储函数,给出id返回性别,无id的返回”没有改客户“

MySQL入门之存储过程与存储函数


下面来调用存储函数和删除存储函数


MySQL入门之存储过程与存储函数