lyt经典版MySQL基础——存储过程
1 #存储过程 2 /* 3 存储过程:类似于java中的方法 4 好处: 5 1、提高代码的重用性 6 2、简化操作 7 8 */ 9 #存储过程 10 /* 11 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 12 1、提高代码的重用性 13 2、简化操作 14 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 15 16 */ 17 18 #一、创建语法 19 /* 20 create procedure 存储过程名(参数列表) 21 begin 22 存储过程体(一组合法的SQL语句) 23 end 24 25 注意: 26 1、参数列表包含三部分 27 参数模式 参数名 参数类型 28 举例: 29 in stuname varchar(20) 30 31 参数模式: 32 in :该参数可以作为输入,也就是该参数需要调用方传入值 33 out :该参数可以作为输出,也就是该参数可以作为返回值 34 inout :该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值 35 36 2、如果存储过程体仅仅只有一句话,begin end 可以省略 37 存储过程体中的每条SQL语句的结尾要求必须加分号。 38 存储过程的结尾可以使用 delimiter 重新设置 39 语法: 40 delimiter 结束标记 41 42 delimiter $ 43 44 45 #二、调用语法 46 call 存储过程名(实参列表); 47 */ 48 49 #1.空参列表 50 #案例:插入到admin表中五条记录 51 DELIMITER $ 52 CREATE PROCEDURE myp1() 53 BEGIN 54 INSERT INTO admin(username,PASSWORD) VALUES('john1','0000'),('lily','0000'),('lucy','0000'),('lily','0000'),('rose','0000'),('lily','0000'),('tom','0000'),('lily','0000'); 55 END $ 56 #调用 57 CALL myp1()$ 58 59 #2.创建带in模式参数的存储过程 60 #案例1:创建存储过程时间 根据女神名,查询对应的男神信息 61 DELIMITER $ 62 CREATE PROCEDURE myp2(IN beautyName VARCHAR(20)) 63 BEGIN 64 SELECT bo.* 65 FROM boys bo RIGHT JOIN beauty b ON bo.id=b.boyfriend_id 66 WHERE b.name=beautyName; 67 END $ 68 #调用 69 CALL myp2('柳岩')$ 70 CALL myp2('小昭')$ 71 72 #案例2:创建存储过程实现,用户是否登录成功 73 DELIMITER $ 74 CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20)) 75 BEGIN 76 DECLARE result INT DEFAULT 0; #声明并初始化 77 78 SELECT COUNT(*) INTO result #赋值 79 FROM admin 80 WHERE admin.username=username 81 AND admin.password=PASSWORD; 82 83 SELECT IF(result>0,'成功','失败'); #使用 84 85 END $ 86 #调用 87 CALL myp4('张飞','9999') $ 88 89 #3.创建带out模式的存储过程 90 #案例1:根据女神名,返回对应的男神名 91 CREATE PROCEDURE myp5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20)) 92 BEGIN 93 SELECT bo.boyName INTO boyName 94 FROM boys bo INNER JOIN beauty b ON bo.id=b.boyfriend_id 95 WHERE b.name=beautyName; 96 END$ 97 #调用 98 CALL myp5('小昭',@bName)$ 99 SELECT @bName$ 100 101 #案例2:根据女神名,返回对应的男神名和男生魅力值 102 DELIMITER $ 103 CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT) 104 BEGIN 105 SELECT bo.boyName,bo.userCP INTO boyName,userCP 106 FROM boys bo INNER JOIN beauty b ON bo.id=b.boyfriend_id 107 WHERE b.name=beautyName; 108 END$ 109 #调用 110 CALL myp6('小昭',@bName,@ucp)$ 111 SELECT @bName,@ucp$ 112 113 #4.创建带inout模式参数的存储过程 114 #案例1:传入a和b两个值,最终a和b都翻倍并返回 115 DELIMITER $ 116 CREATE PROCEDURE myp8(INOUT a INT,INOUT b INT) 117 BEGIN 118 SET a=a*2; 119 SET b=b*2; 120 END$ 121 #调用 122 SET @m=10$ 123 SET @n=20$ 124 CALL myp8(@m,@n)$ 125 SELECT @m,@n$ 126 127 DELIMITER; 128 #二、删除存储过程 129 #语法:drop procedure 存储过程名 130 DROP PROCEDURE myp1; 131 DROP PROCEDURE myp2,myp3; #x 132 133 #三、查看存储过程的信息 134 DESC myp2; #x 135 SHOW CREATE PROCEDURE myp2;
每天进步一点点,快乐生活多一点。