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;
END LOOP add_num;
l Repeat 语句
Repeat
Set @count=@count+1;
Unitl @count=100;
END Repeat;
l While语句
While @count<100 DO
SET @count=@count+1;
End while;
6.通过show命令来查看存储过程和存储函数信息7.修改存储过程和存储函数的内容
8综合实例
现在有一张student表,请创建一个存储过程(输入参数一:起始年龄,输入参数二:结束年龄,输出参数:符合的学生总数量)