MySQL 的变量分为四种: 局部变量 、 用户变量 、 会话变量 和 全局变量 ,个中局部变量只存在于函数和存储历程,这里不多相识。个中 会话变量 和 全局变量 在 MySQL 中统称为 体系变量 。
用户变量
基础
望文生义,就是用户定义的变量。怎样定义变量呢?有两种要领:
SET 体式格局
# 两种体式格局都能够 SET @variable = expr SET @variable := expr
SELECT 体式格局
# 必需 := SELECT @variable := expr
用户变量定义备注:
未定义变量的初始值为
null
(可不定义变量直接运用,不会报错)变量名对大小写不敏感
变量不能在请求字面值的处所运用,比方
select
中的limit
语句等。挪用用户变量的表达式的盘算递次实际上是未定义的,如
SELECT @a = 0, @a := @a + 1;
,两列都多是 0 。为用户变量赋值时,会先肯定表达式的值。怎样明白,请看以下代码:
SET @m = 0; SET @m = 3, @n = @m; SELECT @n; # 0
虽然用户变量的范例能够动态修正,但不发起这么操纵,由于在交代代码的时刻你能够会有生命危险:p。
作为变量,都是有作用域的,用户变量的作用是全部会话,即全部会话间都是有用的。这看起来不错,但要注重,当运用了衔接池,自定义的用户变量又没有准确初始化,轻易涌现意想不到的题目。由于它实际上并没有被烧毁,照旧纪录者上一次的效果。
示例
我们来一个简朴的示例,完成一个序号的功用,表和数据以下:
CREATE TABLE employee ( id int primary key, salary int not null ); INSERT INTO employee VALUES(1, 100); INSERT INTO employee VALUES(2, 200); INSERT INTO employee VALUES(3, 300);
依据之前进修的内容,我们能够很快的写出以下 SQL:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r;
没有题目,一切都和预期一样,然后我们加一个 WHERE 前提尝尝:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r WHERE @rowno = 0;
理论上来讲,这是不应该返回数据的,然则它还就是返回了一条数据,就是 id 为 1 的那条。
为何呢? WHERE 前提运用的 @rowno 一向都是同一个值 0 ,它不会由于 SELECT 上修正了就及时响应 。要完成
WHERE 的功用须要改写成以下:
SELECT salary, rowno FROM ( SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r ) m WHERE rowno = 2;
实际上在 SELECT 的 WHERE 、 GROUP BY 和 ORDER BY 中用户变量都不会按预期操纵,它运用的是旧值,不会及时修正。
体系变量
会话变量
会话变量为服务器为每一个客户端衔接保护的变量。在客户端衔接时,运用响应全局变量的当前值对客户端的会话变量举行初始化。
望文生义,会话变量的作用域就是一个会话 Session 咯。怎样为会话变量设置值呢?以下:
set session var_name = value; set @@session.var_name = value; set var_name = value;
注重,只能为现有的会话变量设置值,不能建立新的会话变量。那怎样猎取会话变量呢?以下:
show session variables; # 以上代码会把一切会话变量排列出来,可通过 like 举行过滤 show session variables LIKE "%var%";
全局变量
全局变量会影响服务器团体操纵。然则一旦重启,这些设置会被重置。注重要想变动全局变量,必需具有SUPER权限。
它的设置和会话变量的设置是相似的:
set global var_name = value; set @@global.var_name = value;
全局变量也不能新增变量,只能修正已有的。而猎取全局变量的操纵也是和会话变量相似:
show session variables; show global variables like "%var%";
以上就是MySQL的变量有哪些?怎样用?的细致内容,更多请关注ki4网别的相干文章!