MySQL 存储过程篇
目录
- 存储过程概述
- delimiter
- 创建存储过程
- 声明局部变量
- call调用存储过程
- drop删除存储过程
1、存储过程概述
存储过程是一组为了完成某项特定功能的SQL语句集,其实质就是一段存储在数据库中的代码,类似于封装
特点:
- 可增强SQL语言的功能和灵活性
- 良好的封装性
- 高性能
- 可减少网络流量
- 可作为一种安全机制来确保数据库的安全性和数据的完整性
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; //删除一个存储过程