百度网站排名查询,单页网站下载,浙江新手网络推广,做网站开直通车存储过程的好处存储过程是一组预编译好的sql语句#xff0c;用来执行某个特定的功能。这样可以省去sql解析、编译、优化的过程#xff0c;提高了执行效率#xff0c;同时#xff0c;在调用的时候只传一个存储过程的名称#xff0c;而不用传一大堆sql语句#xff0c;减少了…存储过程的好处存储过程是一组预编译好的sql语句用来执行某个特定的功能。这样可以省去sql解析、编译、优化的过程提高了执行效率同时在调用的时候只传一个存储过程的名称而不用传一大堆sql语句减少了网络传输。也间接提高了执行效率。存储过程与自定义函数的区别存储过程是一组sql语句为了实现某个独立的功能一般独立执行。而自定义函数更多的作为其它sql语句的组成部分出现。自定义函数只能有一个返回值而存储过程可以有多个返回值。存储过程功能复杂函数针对性更强存储过程定义存储过程是sql语句和控制语句的预编译集合以一个名称存储并作为一个单元处理。创建语法create[definer {user|current_user}]procedure proc_name ([参数[,....]])some body code....参数[in | out | inout] 参数名 类型in 传入的参数out 返回的参数inout 传入 改变 并且返回的参数调用语法call proc_name(参数);如果没有参数括号可以省略示例创建没有参数的存储过程create procedure ver()select version();调用call ver(); 或 call ver;当然这里把一个函数放进一个存储过程没有什么意义。只是单纯为了举例。创建一个in参数的存储过程我们经常查询id为某值的用户所以我们把它写成一个存储过程。delimiter //create procedure findUserById(in userId int unsigned)beginselect * from user where id userId;end //delimiter ;注意参数名不要和数据表中的字段名相同否则会出现意想不到的后果。调用call findUserById(1);创建一个in 一个out参数的存储过程删除一个用户并且返回剩余用户数量delimiter //create procedure delUserByIdAndReturnNums(in userId int unsigned,out nums int unsigned )begindelete from user where iduserId;select count(id) from user into nums;end //delimiter ;调用call delUserByIdAndReturnNums(1,nums);br/调用过后我们就可以查看nums的值了。select nums;创建一个in多个out参数的存储过程删除一个用户并返回剩余用户总数 和 被删除用户的姓名delimiter //create procedure delUser(in userId int ,out nums int,out username varchar(20))beginselect name from user where id userId into username;delete from user where id userId;select count(id) from user into nums;end //delimiter ;调用call delUser(3,nums,username);调用过后可以查看两个变量的值。select nums;select username;创建带有inout参数的存储过程定义一个存储过程传入一个整数得到其平方值。delimiter //create procedure square(inout num int)beginset numnum*num;end //delimiter ;调用由于其参数是inout类型所以我们需要传入一个赋值过的变量以便在存储过程内部对其修改后返回。set num3;call square(num);select num;其结果如下mysql set num3;Query OK, 0 rows affected (0.00 sec)mysql call square(num);Query OK, 0 rows affected (0.02 sec)mysql select num;------| num |------| 9 |------1 row in set (0.00 sec)