通过本章学习,您将可以:
- 什么是存储过程和函数
- 使用存储过程和函数的好处
- 创建存储过程和函数
- 修改存储过程和函数
- 调用存储过程和函数
- 查看存储过程和函数
存储过程和函数:事先经过编译并存储在数据库中的一段sql语句的集合
- 创建存储过程或函数
CREATE PROCEDURE 存储过程名/函数名
BEGIN
...
END
- 调用存储过程或函数
CALL 存储过程名
SELECT 函数名
- 修改存储过程或函数
ALTER PROCEDURE 存储过程名
ALTER FUNCTION 函数名
- 删除存储过程或函数
DROP PROCEDURE [IF EXISTS] 存储过程名
DROP FUNCTION [IF EXISTS] 函数名
- 查看存储过程或函数
SHOW{PROCEDURE|FUNCTION} STATUS LIKE 存储过程或函数名
SHOW CREATE{PROCEDURE|FUNCTION} 存储过程或函数名
SELECT * FROM ROUNTINES WHERE rounine_name = 存储过程名|函数名
#插入到boys表中五条记录
delimiter $
CREATE PROCEDURE myp1 ( ) BEGIN
INSERT INTO boys
VALUES
( 5, '3SA', 100 ),
( 6, '3SAA', 100 ),
( 7, '3SAAA', 100 ),
( 8, '3SAAAA', 100 ),
( 9, '3SAAAAA', 100 );
END $
CALL myp1 ( ) $
执行结果如下:
#创建存储过程实现根据女神名,查询对应的男神信息
delimiter $
CREATE PROCEDURE myp2(in name varchar(10))
begin
select bo.*
from beauty b
left join boys bo
on b.boyfriend_id=bo.id
where b.name = name;
end$
call myp2('王语嫣')$
#全局变量
#set @变量名 =值;
#set @变量名 : =值;
#局部变量 仅仅只能用于begin and 里,而且只能放在第一行
#declare 变量名 default 值
#set 变量名 = 值
#声明两个变量并赋初始值,求和,并打印
set @m = 100;
set @n := 50;
select @m+@n;
declare a int DEFAULT 10;/*运行不成功,只能放在begin and里面*/
#创建存储过程,实现用户是否登陆成功(全局变量法)
CREATE PROCEDURE myp3(in username VARCHAR(10),in password VARCHAR(10))
BEGIN
set @a := 0;
SELECT count(1) into @a
from users u
where u.username = username
and u.password=password;
SELECT if(@a>0,'登陆成功','登陆失败');
END$
call myp3('aaa','111')$
执行结果如下:
#局部变量法
delimiter $
CREATE PROCEDURE myp4(in username VARCHAR(10),in password VARCHAR(10))
BEGIN
DECLARE a int;
SELECT count(1) into a
from users u
where u.username = username
and u.password=password;
SELECT if(a>0,'登陆成功','登陆失败');
END$
call myp4('aaa','111')$
执行结果如下:
#创建带inout模式参数的存储过程
#传入a和b两个值,最终a和b都翻倍并返回
delimiter $
CREATE PROCEDURE myp6 ( INOUT a INT, INOUT b INT ) BEGIN
SET a = a * 2;
SET b = b * 2;
END $
SET @a = 100 $
SET @b = 50 $ CALL myp6 ( @a, @b ) $