MySQL变量一共分为两大类:用户自定义变量和系统变量。如下:

  • 用户自定义变量
    • 局部变量
    • 会话变量
  • 系统变量
    • 会话变量
    • 全局变量
    •  
    • 用户变量:以”@”开始,形式为”@变量名”。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
    • 全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量
    • 会话变量:只对连接的客户端有效。
    • 局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量
  • 用户定义的变量就叫用户变量。这样理解的话,会话变量和全局变量都可以是用户定义的变量。只是他们是对当前客户端生效还是对所有客户端生效的区别了。所以,用户变量包括了会话变量和全局变量

    局部变量与用户变量的区分在于两点:1.用户变量是以”@”开头的。局部变量没有这个符号。2.定义变量不同。用户变量使用set语句,局部变量使用declare语句定义 3.作用范围。局部变量只在begin-end语句块之间有效。在begin-end语句块运行完之后,局部变量就消失了。

    所以,最后它们之间的层次关系是:变量包括局部变量和用户变量。用户变量包括会话变量和全局变量

  • declare定义变量

  • 注意:declare定义的变量名不能带‘@’符号
  • DELIMITER $$
    CREATE PROCEDURE test_while_001(IN in_count INT) # 创建存储过程 学习while循环的用法
    BEGIN
        DECLARE COUNT INT DEFAULT 0;
        DECLARE SUM INT DEFAULT 0;
        WHILE COUNT < in_count DO
            SET SUM = SUM + COUNT;
            SET COUNT = COUNT + 1;
        END WHILE;
        SELECT SUM;
    END $$
    DELIMITER ;
  • 2.调用存储过程

    CALL test_while_001(10); # 45 输出

      3.删除存储过程

    DROP PROCEDURE test_while_001;
  • 例二:

      1.创建函数

    复制代码

    DELIMITER $$
    CREATE FUNCTION my_test_function(quantity INT(10)) RETURNS INT(10) # 创建函数 学习while循环的用法
    BEGIN
        WHILE quantity MOD 12 > 0 DO
            SET quantity = quantity + 1;
        END WHILE;
        RETURN quantity;
    END $$
    DELIMITER ;

    复制代码

      注意:创建函数之前必须更改系统设置 否则无法创建函数

    SET GLOBAL log_bin_trust_function_creators=TRUE;

      2.调用函数

    SELECT my_test_function(10);
    SELECT my_test_function(24);
    SELECT my_test_function(222);

      3.删除函数

    DROP FUNCTION my_test_function;
  • mysql SET定义变量

    mysql set也可以用来定于变量,定义变量的形式是以”@”开始,如:”@变量名”。

    mysql SET定义变量实例:

  • SET @t1=0, @t2=1, @t3=2;

  • SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

  • mysql declare和set定义变量的区别

    mysql declare和set定义变量,除了一个不加@和一个加@这个区别之外

  • declare用来定义局部变量

    @用来定义会话变量

  • @”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据

Logo

更多推荐