一:存储过程
含义:一组预先编译好的sql语句的集合,理解成批处理语句
1.创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql)
end
注意:
1.参数列表包含三部分:参数模式 参数名 参数类型
in stuname varchar(20)
参数模式:in 该参数可以作为输入
out 该参数可以作为输出,返回值
inout可作为输入输出
2.如果存储过程体仅一句话,begin end可以省略
存储过程体中的每条sql语句的结尾要求必须加分号
存储过程结尾可以使用 delimiter重新设置:delimiter 结束标记
2.调用语法
call 存储过程名(实参列表)
#1.空参列表
DELIMITER $$
CREATE PROCEDURE myp()
BEGIN
INSERT INTO admin VALUES(5,'rose','0000');
END $$
#调用存储过程
CALL myp() $$
#2.创建带in模式参数的存储过程
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON bo.id=b.boyfriend_id
WHERE b.name=beautyName;
END $$
#调用
CALL myp2('柳岩')$$
#3.创建存储过程实现,用户是否登录成功
CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
DECLARE result INT DEFAULT 0 ;#创建变量并初始化
SELECT COUNT(*) INTO result #赋值
FROM admin
WHERE admin.`username`=username
AND admin.`password`=PASSWORD;
SELECT IF(result>0,'成功','失败');#使用
END $$
CALL myp4('张飞','8888')$$
#4.创建带out模式的存储过程
CREATE PROCEDURE myp5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
SELECT bo.boyName
FROM boys bo
INNER JOIN beauty b ON bo.id=b.boyriend_id
WHERE b.name=beautyName;
END $$
SET @bname$$#创建变量接收返回值
CALL myb5('小昭',@bname)$$#调用
SELECT @bename$$
#5.创建带inout的存储过程
CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $$
SET @m=10$$
SET @n=20$$
CALL myp6(@m,@n)$$
SELECT @m,@n$$
3.删除存储过程
DROP PROCEDURE 存储过程
4.查看存储过程信息
SHOW CREATE PROCEDURE myp2;
二:函数
含义与存储过程一致
区别:存储过程返回值不限
函数返回值有且仅有1个
创建语法:create function 函数名(参数列表) returns 返回类型
begin
函数体(需要包含return语句)
end
调用函数:select 函数名(参数列表)
#1.无参有返回
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#变量声明
SELECT COUNT(*) INTO c#变量赋值
FROM `employees`;
RETURN c;#变量调用
END $$
SELECT myf1()$$
#2.函数查看
SHOW CREATE FUNCTION myf1;
#3.删除函数
DROP FUNCTION myf1;