数据库
首页 > 数据库> > 理解MySQL变量

理解MySQL变量

作者:互联网

一、MySQL变量分类

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

二、系统变量

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定义变量的区别

标签:session,set,变量,--,理解,increment,MySQL,全局变量
来源: https://www.cnblogs.com/qtiger/p/15922959.html