MySQL详细讲解变量variables的用法

时间:2022-8-16 作者:admin

目录
  • 变量 variables
  • 1、系统变量
    • 1.1、查看系统变量
    • 1.2、修改系统变量
  • 2、会话变量
    • 3、局部变量
      • 4、变量作用域
        • 4.1、局部作用域
        • 4.2、会话作用域
        • 4.3、全局作用域

      变量 variables

      MySQL本质是一种编程语言

      1、系统变量

      对所有用户客户端都有效

      1.1、查看系统变量

      1、方式一

      show variables [like 'pattern'];  

      示例

      mysql> show variables like 'autocommit';  +---------------+-------+  | Variable_name | Value |  +---------------+-------+  | autocommit    | ON    |  +---------------+-------+  

      2、方式二:

      使用select查询变量的数据值

      select @@变量名;

      示例

      select @@autocommit;  +--------------+  | @@autocommit |  +--------------+  |            1 |  +--------------+  

      1.2、修改系统变量

      1、局部修改(会话级别)

      -- 只针对当前客户端当次连接有效  set 变量名 = 值;  -- eg:  set autocommit = 'off';  show variables like 'autocommit';  

      2、全局修改

      -- 所有客户端,都有效  set global 变量名 = 值;  set @@global.变量名 = 值;  -- eg:  set global autocommit = 'off';  

      注意,全局修改之后,重启客户端生效

      2、会话变量

      也称为用户变量,设置的变量,只针对当前用户使用的客户端生效

      -- 定义用户变量  set @变量名 = 值;  set @age = 23;  

      mysql中没有比较符号 == ,使用的是 =;
      为了避免分不清是赋值还是比较,赋值使用:=

      set @变量名 := 值;  set @name := 'Tom';  

      mysql允许将数据从表中取出存储到变量中,只能是一行数据

      -- 1、赋值且查看赋值过程  select @变量1 := 字段1, @变量2 := 字段2 from 表 where 条件  select @name := name, @age := age from my_student limit 1;  +---------------+-------------+  | @name := name | @age := age |  +---------------+-------------+  | 刘备          |          18 |  +---------------+-------------+  --- 2、只赋值不看过程  select 字段1, 字段2 from 表 where 条件 into @变量1, @变量2;  select name, age from my_student limit 1 into @name, @age;  

      查看变量

      select @变量名  mysql> select @name, @age;  +--------+------+  | @name  | @age |  +--------+------+  | 刘备   |   18 |  +--------+------+  

      3、局部变量

      作用范围在begin到end语句块之间,在该语句块里设置的变量

      • declare语句用于定义局部变量
      • 局部变量 declare语句出现在begin到end语句块之间

      声明语法

      declare 变量名 数据类型 [属性];  

      4、变量作用域

      变量能够使用的区域范围

      4.1、局部作用域

      declare 关键字声明 (结构体中使用:函数/存储过程/触发器)

      declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果再外部访问该变量,系统会自动认为是字段

      4.2、会话作用域

      用户定义的,使用@符号定义的变量,使用set关键字

      会话作用域,当次连接有效只要再本连接中,任何地方都可以使用(可以在结构内容,也可以跨库)

      会话变量可以再函数内部使用

      set @name = '张三';  create function get_name() returns char(4)  return @name;  select get_name();  +------------+  | get_name() |  +------------+  | 张三       |  +------------+

      会话变量可以跨库

      use mydatabase2;  mysql> select @name;  +--------+  | @name  |  +--------+  | 张三   |  +--------+ 

      4.3、全局作用域

      所有的客户端,所有的连接都有效,需要使用全局符号来定义

      set global 变量名 = 值;  set @@global.变量名 = 值;  

      通常,在sql编程的时候,不会使用自定义变量来控制全局,一般定义会话变量或者结构中使用局部变量来解决问题

      声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:ms173@126.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。