视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql存储过程使用技巧有哪些
2020-11-08 22:13:32 责编:小采
文档


mysql存储过程使用技巧有:

定义

一组预先编译好的SQL语句的集合,理解成批处理语句,类似于java中的方法

1、提高代码的重用性

2、简化操作

3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

创建语法

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

参数列表包含三部分

参数模式 参数名 参数类型

举例:

in stuname varchar(20)

参数模式:

  • in:该参数可以作为输入,也就是该参数需要调用方传入值

  • out:该参数可以作为输出,也就是该参数可以作为返回值

  • inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

  • 如果存储过程体仅仅只有一句话,begin end可以省略

  • 存储过程体中的每条sql语句的结尾要求必须加分号。

  • 存储过程的结尾可以使用 delimiter 重新设置

  • 语法:

    delimiter 结束标记

    案例:

    delimiter $

    调用语法

    CALL 存储过程名(实参列表);

    空参列表

    插入到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()$

    创建带in模式参数的存储过程

    创建存储过程实现 根据女神名,查询对应的男神信息
    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('柳岩')$

    创建存储过程实现,用户是否登录成功

    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')$

    创建out 模式参数的存储过程

    根据输入的女神名,返回对应的男神名

    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 $

    根据输入的女神名,返回对应的男神名和魅力值

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

    创建带inout模式参数的存储过程

    传入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;

    下载本文
    显示全文
    专题