美文网首页数据库
mysql 存储过程学习

mysql 存储过程学习

作者: 尹楷楷 | 来源:发表于2020-06-18 16:23 被阅读0次

存储过程就是封装sql语言的一个没有返回值的函数

查看已有存储过程
SHOW PROCEDURE STATUS;
SHOW CREATE PROCEDURE insert_100;
执行存储过程

call insert_100();

存储过程使用学习

1、这是一个简单的使用局部变量,字符串拼接,字符串赋值

CREATE DEFINER="root"@"%" PROCEDURE "test1"()
BEGIN
    DECLARE a int DEFAULT 0;
    DECLARE b varchar(20) DEFAULT 'yinkai';
    DECLARE c VARCHAR(30) DEFAULT '';
    
    SELECT concat('a=',a,' ','b=',b) INTO c;
    SELECT c;

END

2、简单计算

CREATE DEFINER="root"@"%" PROCEDURE "test1"()
BEGIN
    DECLARE a int DEFAULT 0;
    DECLARE b int DEFAULT 0;
    DECLARE c int DEFAULT 0;
    
    SET a = 100,b = 300;

    SET c = a + b;
    SELECT c;

END

3、传入参数,进行if-elseif-else 判断

CREATE DEFINER="root"@"%" PROCEDURE "test1"(a int)
BEGIN
    if a < 18 AND a >= 0 then
        select CONCAT(a,'岁==>未成年');
    elseif a >= 18  then
        select CONCAT(a,'岁==>已成年');
    else
        select CONCAT(a,'岁==>非法参数');
    end if;
END
存储过程的in和out 、inout 参数

1、in 是输入类型参数

CREATE DEFINER="root"@"%" PROCEDURE "p1"(IN `num` int)
BEGIN
   
   DECLARE i INT UNSIGNED DEFAULT 0; 
   DECLARE sum INT UNSIGNED DEFAULT 0;

   WHILE i < num DO
        SET i := i + 1;
              SET sum := sum+ i;
        
   END WHILE;
     SELECT sum;

END

2、out类型是输出类型的参数
顾名思义out类型的参数可以从过程中传出来

CREATE DEFINER="root"@"%" PROCEDURE "p2"(IN `num` int,OUT `sum` INT )
BEGIN
   
   DECLARE i INT UNSIGNED DEFAULT 0; 
   -- 注意需要初始化,还有初始化方式,不要加@。这不是用户变量
   SET sum := 0;
     
   WHILE i < num DO
        SET i := i + 1;
              SET sum := sum+ i;
        
   END WHILE;
END

执行

CALL p2(10,@j);
SELECT @j;

注意事项:
1、OUT sum INT 申明的OUT类型参数需要在过程中进行初始化! 直接使用 SET sum := 0; 即可,不然结果一直是NULL的
2、需要传入一个变量,之后这个变量被赋值后又可以传出来。传入参数示例CALL p2(10,@j); 这个@j之后就可以直接使用select查询了

3、inout类型
即是in又是out

CREATE DEFINER="root"@"%" PROCEDURE "p3"(INOUT `age` int)
BEGIN
   SET age := age + 20;
END

执行

SET @x = 10; -- in的特性
CALL p3(@x); -- out的特性
SELECT @x;
存储过程实例

1、输出逗号分隔的 100次随机数,范围在 0- 100之间

 create procedure test_xh(a int) 
    begin
        declare sum int default 0;  -- default 是指定该变量的默认值
        declare i int default 1;
                declare str VARCHAR(16383) default '';
    while i<=a DO -- 循环开始
        set sum=sum+i;
        set i=i+1;
                set str = CONCAT_WS(',', FLOOR( 1 + RAND() * (100 - 1)),str);
    end while; -- 循环结束
    
        SELECT str; -- 打印结果
         
    end;
        
        
    -- 执行存储过程
    call test_xh(100);
    -- 删除存储过程
    drop procedure if exists test_xh;

2、退出存储过程

1、 使用 label:BEGIN 定义开始
2、使用LEAVE label;退出


 create procedure test_xh(a int) 
    label:BEGIN
        declare i int default 1;
    while i<=a DO -- 循环开始
        set i=i+1;
                if (FLOOR( 1 + RAND() * (100 - 1)) = 1) then
          select '包含1';
                    -- 退出
                    LEAVE label;
                elseif(FLOOR( 1 + RAND() * (100 - 1)) = 100) then
                  select '包含100';
                    -- 退出
                    LEAVE label;

        end if;
                
    end while; -- 循环结束
    
         
    end;
            
    -- 执行存储过程
    call test_xh(10000000);
    -- 删除存储过程
    drop procedure if exists test_xh;

3、批量插入数据存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `insert_hit_counter`(in start int(10),in max_num int(10))
begin
 declare i int default 0;
 /*把autocommit设置成0*/
 set autocommit= 0;
 repeat
 set i=i+1;
 INSERT INTO `test`.`hit_counter`(`slot`, `cnt`) VALUES ((start+i), 0);
 until i=max_num end repeat;
commit;
end

相关文章

  • Oracle存储过程语法详解—及8道案例练习

    本文主要讲解ORACLE数据库的存储过程,如果想学习了解MYSQL数据库的存储过程可参考本篇文章mysql存储过程...

  • mysql 存储过程学习

    存储过程就是封装sql语言的一个没有返回值的函数 查看已有存储过程 执行存储过程 call insert_100(...

  • 15 MySQL 存储过程

    MySQL 存储过程 [toc] 存储过程概述 存储过程介绍 存储过程,相当于是 MySQL 语句组成的脚本 指的...

  • SQL语言:存储过程

    前言 本章我们将学习数据库中的存储过程,了解什么是存储过程,以及在MySQL中创建和调用存储过程。 存储过程是什么...

  • 存储过程

    使用存储过程 1.存储过程 ​ 需要MySQL5---->> MySQL5添加了对存储过程的支持。 ​ 迄...

  • MySQL存储过程详解 mysql 存储过程

    原文链接 MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然...

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • MySQL学习之存储过程

    一、存储过程 1-1、含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1、提高代码的重用性2、简化操作3...

  • 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)

    MySQL存储过程 一、存储过程 1.1 什么是存储过程 存储过程(Stored Procedure)是在大型数据...

  • 找工作必备技能

    基础知识Java和JQuery SpringMVC 源码学习-入门 Mysql存储过程,Mysql高级查询相关SQ...

网友评论

    本文标题:mysql 存储过程学习

    本文链接:https://www.haomeiwen.com/subject/ziabihtx.html