日期:2014-05-16  浏览次数:20732 次

mysql存储过程心得

问题:mysql存储过程的意义?

  •    存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。  存储过程会预先编译好sql语句在数据库服务器,提高了数据查询的速度,减小了客户端的压力
  •   速度快。尤其是对比较复杂的业务逻辑,减少了网络间流量的消耗
  •  存储过程可以重复使用,可减少数据库开发人员的工作量
  • 安全性高,可设定只有某此用户才具有对指定存储过程的使用权
  • 当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。

问题:mysql存储过程使用的时机?

  •  一个业务对多个表进行查询的时候比较适合
  •  复杂的数据处理时,比如报表处理
  •  多条件并且多表查询时,如做分页处理






mysql存储过程的实战教程


1 创建一个存储过程

2.创建存储函数

3.定义处理程序

方法一:捕获sqlstate_value

Declare CONTINUE HANDLER FOR SQLSTATE ‘42S02’ SET @info=’cannot  find’;

方法二:捕获mysql_error_code

Declare CONTINUE HANDLER FOR 1146 SET @info=’con not  find’;

方法三:是定义条件,然后调用

Declare can_not_find CONDITION  FOR 1146;

Declare CONTINUE HANDLER FOR can_not_find set @info=’can not find’;

方法四:使用SQLWARNING

Declare exit handler for SQLWARNING SET @info=’error’;

方法五:使用not found

Declare exit handler for NOT FOUND SET @info=’can not find’;

方法六:使用SQLEXCEPTION

Declare EXIT HANDLERFOR SQLEXCEPTION SET @info=’error’;


4.定义光标

Declare  cur_name varchar(20);

Declare  cur_address varchar(20);

声明光标

Declare cur_student CURSOR FOR select name,address from student;

打开光标

OPEN  cur_student

使用光标

FETCH cur_student into cur_name,cur_address;

关闭光标

Close  cur_student

5.循环控制流程

循环控制流程

 

l        IF语句

If   age=10 then

  Elseif age=20    then

  Else  

End if;

l         Case语句

CASE

   WHEN    THEN

   WHER     THEN

ELSE

END CASE;

 

l        LOOP语句和LEAVE语句  LEAVE是跳出循环  add_num结束标签

 add_num LOOP

SET  @count=@count+1;

If  @count=100   then

 LEAVE add_num;

              END LOOP add_num;   

 

 

l        ITERATE语句 结束本次循环

add_num LOOP

SET  @count=@count+1;

If  @count=100   then

 ITERATE add_num;

Select  * from  student;

&n