百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL的变量是什么?如何用?
分享文章到:

MySQL的变量是什么?如何用?

发布时间:08/01 来源:未知 浏览: 关键词:
MySQL的变量分为四种:部分变量、会员变量、会话变量和全局变量,其中部分变量只存在于函数和存储历程,这里未几理解。其中会话变量和全局变量在MySQL中统称为系统变量。 本篇文章给大家带来的内容是对于MySQL的变量是什么?如何用?有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

MySQL 的变量分为四种: 部分变量 、 会员变量 、 会话变量 和 全局变量 ,其中部分变量只存在于函数和存储历程,这里未几理解。其中 会话变量 和 全局变量 在 MySQL 中统称为 系统变量 。

会员变量

根本

望文生义,就是会员定义的变量。怎样定义变量呢?有两种办法:

SET 方式

# 两种方式都可以
SET @variable = expr
SET @variable := expr

SELECT 方式

# 必需 :=
SELECT @variable := expr

会员变量定义备注:

  1. 不决义变量的初始值为 null(可不定义变量直接运用,不会报错)

  2. 变量名对大小写不敏锐

  3. 变量不克不及在请求字面值的地方运用,比方 select 中的 limit 语句等。

  4. 调取会员变量的表达式的盘算次序现实上是不决义的,如 SELECT @a = 0, @a := @a + 1;,两列都可能是 0 。

  5. 为会员变量赋值时,会先肯定表达式的值。怎样了解,请看如下代码:

    SET @m = 0;
    SET @m = 3, @n = @m;
    SELECT @n; # 0
  6. 虽然会员变量的类型可以动态修改,但不倡议这么操纵,由于在交接代码的时候你可能会有生命惊险: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的变量是什么?如何用?的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板