MySql存储过程及函数
存储过程和函数类似于Java中的方法。
⒈存储过程
一组预先编译好的sql语句的集合,理解成批处理语句。
好处:
①提高代码的重用性
②简化操作
③减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
1.创建语法
1 create procedure 存储过程名称(参数列表) 2 begin 3 存储过程体(一组合法的sql语句) 4 end
*参数列表包含了三部分
①参数模式 例如:IN
②参数名 例如:username
③参数类型 例如:varchar(20)
参数模式:
参数模式 | 说明 |
IN | 该参数可以作为输入,也就是说该参数需要调用方传入值。 |
OUT |
该参数可以作为输出,也就是说该参数可以作为返回值。 |
INOUT |
该参数既可以作为输入又可以作为输出,也就是该参数既需要 传入值,又可以返回值 |
*如果存储过程体仅只有一句话,那么begin end可以省略
*存储过程中的每条sql语句的结尾必须加分号
*存储过程的结尾标记可以使用delimiter重新设置。
语法:delimiter 结束标记
示例:delimiter $
2.调用语法。
1 call 存储过程名(实参列表);
3.删除存储过程
1 drop procedure 存储过程名; #一次只能删除一个
4.查看存储过程的信息
1 show create procedure 存储过程名;
示例:
①空参列表
插入到users表中2条记录
1 delimiter $$ 2 create procedure test1() 3 begin 4 insert into users(UserName,`PassWord`) values('fanqi','admin'),('gaoxing','admin'); 5 end$$ 6 7 call test1();
②创建带in模式参数的存储过程
创建存储过程用于判断用户是否登录成功
1 delimiter $$ 2 create procedure test2(in username VARCHAR(25),in `password` varchar(25)) 3 begin 4 declare result int default 0; #声明一个局部变量用于保存是否登录成功 5 select count(*) into result from users where users.UserName = username and users.`PassWord` = password; 6 select if(result > 0,'登录成功','登录失败'); 7 end$$ 8 9 call test2('fanqi','admin');
③创建带out模式参数的存储过程
根据用户名,返回该用户对应的密码
1 create procedure test3(in username VARCHAR(25),out `password` varchar(25)) 2 begin 3 select users.`PassWord` into `password` from users where users.UserName = username limit 1; 4 end$$ 5 6 set @password; 7 call test3('fanqi',@password); 8 select @password;
④创建带inout模式参数的存储过程
传入a和b两个值,将a和b的值翻倍后返回
1 delimiter $$ 2 create procedure test4(inout a int,inout b int) 3 begin 4 set a = a * 2; 5 set b = b * 2; 6 end$$ 7 8 set @a = 10, @b = 20; 9 call test4(@a,@b); 10 select @a,@b;
⒉函数
函数和存储过程意义和好处都是一样的。它们的唯一区别就是:
存储过程可以没有返回值,也可以有多个返回值,适合做批量插入数据、批量更新等。
函数必须有返回值,而且只能有1个,适合做处理数据后返回1个结果。
1.创建语法
1 create function 函数名(参数列表) returns 返回类型 2 begin 3 函数体 4 end
*参数列表包含两部分
①参数名 例如:username
②参数类型 例如:varchar(20)
*函数体中必须有return语句,如果没有会报错。建议将return语句放在函数体的末尾,当然,没在末尾也不报错。
*函数体中仅有一句话,则可以省略begin end
*函数的结尾标记也可以使用delimiter重新设置。
2.调用语法
1 select 函数名(参数列表);
3.删除函数
1 drop function 函数名;
4.查看函数
1 show create function 函数名;
示例:
①没有参数(函数必须有返回值,而且只能有1个)
返回users表的条目数
1 set global log_bin_trust_function_creators=TRUE; 2 delimiter $$ 3 create function test1() returns int 4 begin 5 declare num int default 0; 6 select count(*) into num from users; 7 return num; 8 end$$ 9 10 select test1();
②有参数(函数必须有返回值,而且只能有1个)
根据用户名,返回该用户对应的密码
1 set global log_bin_trust_function_creators=TRUE; 2 delimiter $$ 3 create function test2(username varchar(20)) returns varchar(20) 4 begin 5 set @password = ''; 6 select users.`PassWord` into @password from users where users.UserName = username; 7 return @password; 8 end$$ 9 10 select test2('fanqi');