zoukankan      html  css  js  c++  java
  • MySQL存储过程和函数

    /*
    存储过程和函数:类似于java中的方法
    好处:
    1、提高代码的重用性
    2、简化操作
    */

    #存储过程
    /*
    含义:一组预先编译好的SQL语句的集合,理解成批处理语句
    1、提高代码的重用性
    2、简化操作
    3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

    */
    #一、创建语法

    CREATE PROCEDURE 存储过程名(参数列表)
    BEGIN
    存储过程体(一组合法的SQL语句)
    END


    #注意:
    /*
    1、参数列表包含三部分
    参数模式 参数名 参数类型

    举例:
    in stuname varchar(20)


    参数模式:
    in:该参数可以作为输入,也就是该参数需要调用方传入值
    out:该参数可以作为输出,也就是该参数可以作为返回值
    inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

    2、如果存储过程体仅仅只有一句话,begin end可以省略。
    存储过程体中的每条sql语句的结尾要求必须加分号。
    存储过程的结尾可以使用 delimiter 重新设置。
    语法:

    delimiter 结束标记

    案例:
    delimiter $

    */

    #二、调用语法
    CALL 存储过程名(实参列表);


    DOS窗口:
    #--------------------------------案例演示-----------------------------------
    #1.空参列表
    #案例:插入到admin表中五条记录

    SELECT * FROM admin;
    
    DELIMITER $
    CREATE PROCEDURE myp1()
    BEGIN
    INSERT INTO admin(username,`password`)
    VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
    END $
    
    #调用
    CALL myp1()$


    #2.创建带in模式参数的存储过程
    #案例1:创建存储过程实现 根据女神名,查询对应的男神信息

    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('柳岩')$


    #案例2 :创建存储过程实现,用户是否登录成功

    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 myp3('张飞','8888')$


    #3.创建out 模式参数的存储过程
    #案例1:根据输入的女神名,返回对应的男神名

    CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
    BEGIN
    SELECT bo.boyname INTO boyname
    FROM boys bo
    RIGHT JOIN
    beauty b ON b.boyfriend_id = bo.id
    WHERE b.name=beautyName ;
    
    END $

    #案例2:根据输入的女神名,返回对应的男神名和魅力值

    CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT)
    BEGIN
    SELECT bo.boyname ,bo.usercp INTO boyname,usercp
    FROM boys bo
    RIGHT JOIN
    beauty b ON b.boyfriend_id = bo.id
    WHERE b.name=beautyName ;
    
    END $
    
    
    #调用
    CALL myp7('小昭',@name,@cp)$
    SELECT @name,@cp$

    #4.创建带inout模式参数的存储过程
    #案例1:传入a和b两个值,最终a和b都翻倍并返回

    CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT)
    BEGIN
    SET a=a*2;
    SET b=b*2;
    END $
    
    #调用
    SET @m=10$
    SET @n=20$
    CALL myp8(@m,@n)$
    SELECT @m,@n$


    #三、删除存储过程
    #语法:

    drop procedure 存储过程名
    
    
    DROP PROCEDURE p1;
    
    
    DROP PROCEDURE p2,p3; # ×错误的


    #四、查看存储过程的信息

    DESC myp2; # ×错误的
    
    
    SHOW CREATE PROCEDURE myp2;
  • 相关阅读:
    linux内核中GNU C和标准C的区别
    linux内核中GNU C和标准C的区别
    Getting start with dbus in systemd (02)
    Getting start with dbus in systemd (01)
    Getting start with dbus in systemd (03)
    物理内存相关的三个数据结构
    数据类型对应字节数(32位,64位 int 占字节数)
    Linux kernel 内存
    共模电感的原理以及使用情况
    [原创]DC-DC输出端加电压会烧毁
  • 原文地址:https://www.cnblogs.com/wzhqzm/p/13512379.html
Copyright © 2011-2022 走看看