• 理解MySQL变量


    一、MySQL变量分类

    在mysql文档中,mysql变量可分为两大类,即系统变量和用户自定义变量。但根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。具体如下:

    • 用户自定义变量
      • 局部变量
      • 用户变量
    • 系统变量
      • 会话变量(session)
      • 全局变量(global)

    二、系统变量

    1、会话变量

    mysql会话变量,服务器为每个连接的客户端维护一系列会话变量。其作用域仅限于当前连接,即每个连接中的会话变量是独立的。

    -- 显示所有的会话变量
    show session variables;
    
    -- 设置会话变量的值的三种方式
    set session auto_increment_increment=1;
    set @@session.auto_increment_increment=2;
    set auto_increment_increment=3;        -- 当省略session关键字时,默认缺省为session,即设置会话变量的值
    
    -- 查询会话变量的值的三种方式
    select @@auto_increment_increment;
    select @@session.auto_increment_increment;
    show session variables like '%auto_increment_increment%';        -- session关键字可省略
    
    -- 关键字session也可用关键字local替代
    set @@local.auto_increment_increment=1;
    select @@local.auto_increment_increment;

    2、全局变量

    全局变量影响服务器整体操作。当服务器启动时,它将所有全局变量初始化为默认值。这些默认值可以在选项文件中或在命令行中指定的选项进行更改。要想更改全局变量,必须具有SUPER权限。全局变量作用于server的整个生命周期,但是不能跨重启。即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。

    -- 显示所有的全局变量
    show global variables;
    
    -- 设置全局变量的值的两种方式
    set global sql_warnings=ON;        -- global不能省略
    set @@global.sql_warnings=OFF;
    
    -- 查询全局变量的值的两种方式
    select @@global.sql_warnings;
    show global variables like '%sql_warnings%';

    三、用户自定义变量

    1、局部变量

    局部变量一般用于SQL的语句块中,比如存储过程中的begin和end语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。

    DELIMITER $$
    DROP PROCEDURE IF EXISTS proc_add $$
    CREATE PROCEDURE proc_add
    (
        IN a INT,
        IN b INT
    )
    BEGIN
        DECLARE c INT DEFAULT 0;#c就是局部变量
        SET c=a+b;
        SELECT c AS c;
    END $$
    DELIMITER ;
    
    CALL proc_add(1,2);

    上述存储过程中定义的变量c就是局部变量。

    2、用户变量

    mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了。

    -- 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值
    set @content='hello';
    
    set @content:='hello';
    
    -- 第二种用法,使用select时必须用“:=”赋值符号赋值
    select @content:=22;
    
    select @content:=content
    from t_test 
    where id='100';

    四、declare和set定义变量的区别

    • declare和set定义变量,除了一个不加@和一个加@

    • declare用来定义局部变量,declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。

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

  • 相关阅读:
    Android测试:从零开始3—— Instrumented单元测试1
    Android测试:从零开始2——local单元测试
    自定义封装 banner 组件
    常用表单 组件封装
    ContentProvider域名替换小工具
    接口回调封装
    日常记录-代码中Background后Padding 失效
    EditText 限制输入整数和小数 的位数
    (求助)对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知
    图片选择器ImageEditContainer
  • 原文地址:https://www.cnblogs.com/qtiger/p/15922959.html
Copyright © 2020-2023  润新知