lyt经典版MySQL基础——存储过程

Posted 学而时习之,不亦说乎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于lyt经典版MySQL基础——存储过程的主要内容,如果未能解决你的问题,请参考以下文章

lyt经典版MySQL基础——流程控制结构

lyt经典版MySQL基础——变量

lyt经典版MySQL基础——进阶1:基础查询

lyt经典版MySQL基础——进阶2:条件查询

lyt经典版MySQL基础——进阶2:常见函数-分组函数

lyt经典版MySQL基础——进阶6:连接查询-sql92语法-内连接