<MySQL>入门七 存储过程和函数
-- 存储过程和函数 /* 存储过程和函数:类似java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ /* 存储过程 含义:一组预先编译好的SQL语句的集合。理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 */ -- 创建存储过程 CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL) END /* 注意: 1.参数列表包含三部分:参数模式 参数名 参数类型 例如:IN stuName varchar(20); 参数模式: IN :该参数可以作为输入,需要调用方传入值 OUT :改参数可以作为输出,该参数作为返回值 INOUT :该参数既可以输入也可以输出,该参数既需要传入值,又可以返回值 2.如果存储过程提只有一句话,begin end 可以省略 3.存储过程体中每条SQL语句的结尾必须加分号 4.存储过程的结尾可以使用 DELIMITER 重新设置 例如 DELIMITER 任意字符 */ -- 调用存储过程 CALL 存储过程名(实参列表); -- ----------------------案例----------------------------------------- -- 1.空参列表 -- 插入到amdin表中五条记录 DELIMITER $ CREATE PROCEDURE myp1() BEGIN INSERT INTO admin(username,`password`) VALUES ('a','00000'), ('b','00000'), ('c','00000'), ('d','00000'), ('e','00000'); END $ -- 调用 CALL myp1()$ -- 2.创建代in模式参数的存储过程 -- 案例1.创建存储过程,根据女神名查询对应的男生信息 DELIMITER $ CREATE PROCEDURE myp2(IN beautyName VARCHAR(50)) BEGIN SELECT bo.* FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id WHERE be.name = beautyName; END $ -- 调用 CALL myp2('麦克雷')$ -- 如果出现字符集问题,可以set names gbk$ -- 案例2 创建存储过程,实现用户是否登录成功 DELIMITER $ CREATE PROCEDURE myp3(IN username VARCHAR(10),IN PASSWORD VARCHAR(10)) 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 myp3('john','8888')$ -- 3.创建代 in / out的存储过程 -- 案例1 根据女神名,返回对应的男神名 DELIMITER $ CREATE PROCEDURE myp4(IN NAME VARCHAR(50),OUT boyName VARCHAR(20)) BEGIN SELECT bo.boyName INTO boyName FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id WHERE be.name = NAME; END $ -- 调用 CALL myp4('麦克雷',@bName)$ SELECT @bName $ -- 案例2.根据女神名,返回对应的男神名和男神魅力值 DELIMITER $ CREATE PROCEDURE myp5(IN NAME VARCHAR(50),OUT boyName VARCHAR(20),OUT userCP INT) BEGIN SELECT bo.boyName,bo.userCP INTO boyName,userCP FROM boys bo JOIN beauty be ON bo.id = be.boyfriend_id WHERE be.name = NAME; END $ -- 调用 CALL myp5('麦克雷',@boyName,@userCP)$ SELECT @boyName,@userCP $ -- 4.创建代 inout 模式参数的存储过程 -- 案例1.传入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 @m = 10$ SET @n = 20$ -- 调用 CALL myp6(@m,@n)$ -- 查询值 SELECT @m,@n$
练习
-- 练习 -- 1.创建存储过程 实现 传入用户名密码,插入到admin中 DELIMITER $ CREATE PROCEDURE myep1(IN username VARCHAR(10),IN PASSWORD VARCHAR(20)) BEGIN INSERT INTO admin(username,`password`) VALUES(username,PASSWORD); END $ CALL myep1('士兵76','123456')$ -- 2.创建存储过程 实现传入女神编号,返回女神名称和女神电话 DELIMITER $ CREATE PROCEDURE myep2(IN id INT,OUT NAME VARCHAR(50),OUT phone VARCHAR(11)) BEGIN SELECT be.name,be.phone INTO NAME,phone FROM beauty be WHERE be.id = id; END $ CALL myep2(1,@name,@phone)$ SELECT @name,@phone$ -- 3.创建存储过程 实现传入两个女神生日,返回大小 DELIMITER $ CREATE PROCEDURE myep3(IN birth1 DATETIME,IN birth2 DATETIME,OUT result INT) BEGIN SELECT DATEDIFF(birth1,birth2) INTO result ; END $ CALL myep3('1992-3-6',NOW(),@result)$ SELECT @result$
存储过程的删除和查看
-- 删除存储过程,每次只能删除一个 -- drop procedure 存储过程名 DROP PROCEDURE myp1; -- 查看存储过程 SHOW CREATE PROCEDURE myep1;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步