mysql的存储过程,存储函数,游标,流程控制
2015-02-27 09:42
441 查看
存储过程
MySQL5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。MySQL5.0终于开始已
经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
1.存储过程的优点
(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
2.语法
MySQL存储过程创建的格式:CREATEPROCEDURE过程名([过程参数[,...]])[特性...]过程体
函数
1:语法
createfunction函数名称(参数)|||||||||||return函数类型(函数类型的返回值)
游标
mysql游标还有它的一些特性:
1.服务器端
有些数据库服务器可以同时运行服务器端和客户端游标。服务器游标在数据库中管理,而客户端游标可以在数据库之外的应用程序(程序语言等)中生成,控制。MySQL只支持服务器端游标,也就是说,所有的游标必须和存储过程一样,事先写在数据库中,在各语言中只能进行请求调用。
2.只读
游标可以是可读和可写的。只读游标可以从数据库中读取数据,而可写游标可以更新由游标指向的数据。MySQL只支持只读游标,也就是说,只能进行数据查询。
3.敏感
游标可以是敏感的,也可以是不敏感的。敏感游标引用数据库中的实际数据,而不敏感的游标指向在创建游标时建立的数据临时副本。MySQL只支持敏感游标,因为是只读的,所以不用考虑破坏数据,因此直接对数据进行操作也没问题。
4。只向前
高级的游标实现可以向后和向前遍历数据集,跳过记录,完成大量其它的导航任务。目前MySQL游标只是向前的,意味着只能向前遍历数据集。此外,MySQL游标一次只能向前移动一条记录,不能跳过。
流程控制
1.分支ifcase,
2.循环whilerepeatloop,
示例
begin
declarememberid2int;
declareis_fountintdefault1;
declaremy_curcursorforselectdistinctallorder.memberidfrom(selectmemberidasmemberid,userphoneasphonefromkeepcar_orderwherekeepcar_order.cust_status=6unionselectmemberidasmemberid,userphoneasphonefromkeepcar_giftpack_order)asallorderwhereallorder.memberidnotin(selectmemberidfromkeepcar_couponswherekeepcar_coupons.ifuse=1andendtime>'2015-04-0323:59:59');
declarecontinuehandlerfornotfoundsetis_fount=0;//为游标绑定循环完毕的标识
openmy_cur;
lab1:loop
fetchnextfrommy_curintomemberid2;
ifis_fount=0thenleavelab1;
else
insertintokeepcar_coupons(createtime,memberid,money,coutype,remarks,usetime,orderid,endtime,ifuse,sourcetype,lbcodeid)VALUES(now(),memberid2,30,'1','手动添加',null,null,'2015-04-3023:59:59','1','0',null);
endif;
endloop;
closemy_cur;
end;
MySQL5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。MySQL5.0终于开始已
经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
1.存储过程的优点
(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
2.语法
MySQL存储过程创建的格式:CREATEPROCEDURE过程名([过程参数[,...]])[特性...]过程体
函数
1:语法
createfunction函数名称(参数)|||||||||||return函数类型(函数类型的返回值)
游标
mysql游标还有它的一些特性:
1.服务器端
有些数据库服务器可以同时运行服务器端和客户端游标。服务器游标在数据库中管理,而客户端游标可以在数据库之外的应用程序(程序语言等)中生成,控制。MySQL只支持服务器端游标,也就是说,所有的游标必须和存储过程一样,事先写在数据库中,在各语言中只能进行请求调用。
2.只读
游标可以是可读和可写的。只读游标可以从数据库中读取数据,而可写游标可以更新由游标指向的数据。MySQL只支持只读游标,也就是说,只能进行数据查询。
3.敏感
游标可以是敏感的,也可以是不敏感的。敏感游标引用数据库中的实际数据,而不敏感的游标指向在创建游标时建立的数据临时副本。MySQL只支持敏感游标,因为是只读的,所以不用考虑破坏数据,因此直接对数据进行操作也没问题。
4。只向前
高级的游标实现可以向后和向前遍历数据集,跳过记录,完成大量其它的导航任务。目前MySQL游标只是向前的,意味着只能向前遍历数据集。此外,MySQL游标一次只能向前移动一条记录,不能跳过。
流程控制
1.分支ifcase,
2.循环whilerepeatloop,
示例
<prename="code"class="sql">dropprocedureifexistsmy_pro22; createproceduremy_pro22(
drop functionifexists my_fun; create function my_fun(datetime varchar(50)) returns varchar(50) begin declaredate_outvarchar(50); setdate_out=datetime; return date_out; end
<p>DROPPROCEDUREIFEXISTS my_PRO</p><p>CREATEPROCEDUREmy_PRO(INs1INT,OUTs2INT,INOUTs3VARCHAR(10))
BEGIN
DECLAREx1VARCHAR(10)DEFAULT'thisisx1';
DECLAREx2VARCHAR(10)DEFAULT'thisisx2';
SETs1=11;
SETs2=22;
SETs3='iss3';
--if语法
IFs1=11ANDs2=12THEN
SELECTs1,s2;
ENDIF;</p><p>IFs3='s3'ORs1=s2THEN
SELECTs3;
ELSE
SELECTs1,s2,s3;
ENDIF;</p><p>--case语法
CASEs3
WHEN's1'THEN
SELECT'thisiss1';
WHEN's2'THEN
SELECT'thisiss2';
ELSE
SELECT'thisiss3';
ENDCASE;</p><p>--while循环
WHILEs1>1DO
SETs1=s1-1;
ENDWHILE;
SELECTs1;</p><p>--repeat循环语句
--与while不同的是while满足条件就执行,repeat始终执行直到满足条件终止
REPEAT
SETs1=s1-1;
UNTILs1=1
ENDREPEAT;
SELECTs1;</p><p>
/*
LOOP循环
LOOP没有循环条件,会不停的循环直到遇到"LEAVEZiDingYi;""ZiDingYi"是自定义的LOOP标记
*/
ZiDingYi:LOOP
SETs1=s1+1;
IFs1=5THEN
LEAVEZiDingYi;
ENDIF;
ENDLOOP;
SELECTs1;
END</p>
相关文章推荐
- 初学mysql(十)-数据库之存储过程、函数与游标-自定义函数和流程控制(下)
- MySql存储过程及MySql常用流程控制语法
- MySql存储过程及MySql常用流程控制语法
- MYSQL基础(视图、索引、存储过程与函数、流程控制语句)
- MySql存储过程及MySql常用流程控制语法(精)
- mysql流程控制、自定义函数、存储过程
- MySQL存储过程之流程控制
- MySql存储过程及MySql常用流程控制语法
- MySql存储过程及MySql常用流程控制语法
- [置顶] 【mysql 存储过程】存储过程之流程控制语句
- MySql存储过程及MySql常用流程控制语法
- MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- MySql 存储过程使用游标循环插入数据示例
- mysql 存储过程游标(Cursor)实例
- MySQL存储过程的控制语句
- [轉]MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等
- Mysql存储过程优化——使用临时表代替游标
- MySQL 存储过程中使用游标
- Mysql存储过程中临时表的建立及游标遍历
- mysql存储过程控制语句