MySQL 存储过程篇

目录

  • 存储过程概述
  • delimiter
  • 创建存储过程
  • 声明局部变量
  • call调用存储过程
  • drop删除存储过程

 

1、存储过程概述

  存储过程是一组为了完成某项特定功能的SQL语句集,其实质就是一段存储在数据库中的代码,类似于封装

       特点:

  1. 可增强SQL语言的功能和灵活性
  2. 良好的封装性
  3. 高性能
  4. 可减少网络流量
  5. 可作为一种安全机制来确保数据库的安全性和数据的完整性

 

2、delimiter

  用来作为用户定义的结束符

  delimiter $$   修改结束符冒号为$$作为结束符,这样可以在使用以;作为句子时的语句能够正确结束

 

3、创建存储过程

 1 示例:在mysql_test中创建一个存储过程,用于实现给定表customer中一个客户id号即可修改表customer中该客户的性别为一个指定的性别
 2 
 3 //表格式
 4 customer(cust_sex,cust_id,cust_name,cust_age);
 5 
 6 ->delimiter $$
 7 ->create procedure sp_update_sex(in  cid  int,in csex  char(1))
 8 ->begin
 9 ->update  customers  set  cust_sex = csex where cust_id = cid; 
10 ->end $$
11 
12 
13 //这里的create  procedure为创建一个存储过程
14 //cid 和csex为两变量,一个为int类型,一个为char类型,都是可输入in类型
15 //begin为存储过程体书写标志
16 //end $$标志着结束

 

4、使用存储过程

//实际就是值的转换

->call sp_update_sex(1,"X")$$


//存储过程的使用是通过call来调用的,这里我的存储过程sp_update_sex的作用是把id相同时,其对应的性别进行转换,这里我就直接进行转化了。没有多余的操作,很方便

 

5、声明局部变量

使用declare语句声明局部变量

1)只能在存储过程体的begin...end语句块中声明
2)必须在存储过程的开头处声明
3)作用范围仅限于声明它的begin...end语句块
4)不同于用户变量


局部变量与用户变量的区别:
1)局部变量声明时,在其前面没有@符号,并且它只能被声明它的begin...end语句块中的语句所使用
2)用户变量在声明时,会在其名称前面使用@符号,同时已声明的用户变量存在于整个会话之中


->declare cid int(10);  //声明一个局部变量
->set cid = 109;    //为这个局部变量赋值

select col_name【...】 into var_name[...] table_expr
col_name   指定列名
var_name   指定要赋值的变量名
table_expr  表示select语句中的from子句及后面的语法部分
重点:返回的只能是一行数据

//使用select...into语句把选定列的值直接存到局部变量中

 

 6、创建游标

//创建一个游标

->declare cursor_name cursor for select_statement;

//cursor_name游标名称


open cursor_name;

//打开游标




//使用fetch...into语句读取数据

->fetch cursor_name into var_name[var_name]...

//cursor_name指定已打开的游标
//var_name指定存放数据的变量名



->close cursor_name   
//关闭游标

 

7、call调用储存过程

call  ap_update_sex(3,"nan")$$

//这里$$为结束符

 

8、删除存储过程

drop procedure if exists ap_update_sex;
//删除一个存储过程

 

posted @ 2019-08-23 16:19  极客海  阅读(302)  评论(0编辑  收藏  举报