zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    数据结构杂谈(三)堆排序
    数据结构杂谈(二)简单有趣的地精排序Gnome sort
    搭建proftp服务器
    python 单例模式
    mongo
    kafka
    查看端口占用
    tinyproxy 代理使用
    Linux 搭建wiki
    linux 安装 java
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/13406195.html
Copyright © 2011-2022 走看看