MySQL入门之存储过程与存储函数
-------------------------------------------------------------------------------------------------------------
教程大纲:
http://blog.csdn.net/qq78442761/article/details/76018310
-------------------------------------------------------------------------------------------------------------
存储过程
存储过程的特点:
1.可增强SQL语言的功能和灵活性
2.良好的封装性
3.高性能
4.可减少网络流量
5.存储过程可以作为一种安全机制来确保数据库的安全性和数据的完整性
创建存储过程
将mysql结束符修改为两个叹号再修改回来
给test_1中创建一个存储过程,用于实现给定表customers中一个cust_id 即可修改表中该客户的性别为一个指定的性别
注意:创建存储过程必须具有create routine权限
查看数据库中存在哪些存储过程
查看某个存储过程的具体信息
存储过程体
1.局部变量
a) 声明局部变量用于存储存储过程中的临时结果
b) 使用declare
c) 只存在于begin end 中
d) 必须在存储过程体的开头处声明
e) 用户变量要用@,用户变量存在于整个会话中
下面演示申请局部变量
Set语句
在存储变量中使用set语句为局部变量赋值,如下操作
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中的数据行的行数
调用存储过程sp_sumofrow进行调用再查看存储过程sp_sumofrow后的结果
调用存储过程
我们先创建一个存储过程
下面我们先查看一下customers1表
现在来调用并查看存储过程
修改存储过程
用alter procedure修改部分,但一般是先删除在创建
删除存储过程
存储函数
1.与存储过程十分相似
2.不能拥有输出函数
3.可以直接调用,不需要call语句
4.必须包含一个return语句
下面来创建一个存储函数,给出id返回性别,无id的返回”没有改客户“
下面来调用存储函数和删除存储函数