MySQL的变量有哪些?怎么用?


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于MySQL的变量有哪些?怎么用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

MySQL 的变量分为四种: 局部变量 、 用户变量 、 会话变量 和 全局变量 ,其中局部变量只存在于函数和存储过程,这里不多了解。其中 会话变量 和 全局变量 在 MySQL 中统称为 系统变量 。

用户变量

基本

顾名思义,就是用户定义的变量。如何定义变量呢?有两种方法:

SET 方式

1

2

3

# 两种方式都可以

SET @variable = expr

SET @variable := expr

SELECT 方式

1

2

# 必须 :=

SELECT @variable := expr

用户变量定义备注:

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

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

  3. 变量不能在要求字面值的地方使用,比如 select 中的 limit 语句等。

  4. 调用用户变量的表达式的计算顺序实际上是未定义的,如 SELECT @a = 0, @a := @a + 1;,两列都可能是 0 。

  5. 为用户变量赋值时,会先确定表达式的值。如何理解,请看如下代码:

    1

    2

    3

    SET @m = 0;

    SET @m = 3, @n = @m;

    SELECT @n; # 0

  6. 虽然用户变量的类型可以动态修改,但不建议这么操作,因为在交接代码的时候你可能会有生命危险:p。

作为变量,都是有作用域的,用户变量的作用是整个会话,即整个会话间都是有效的。这看起来不错,但要注意,当使用了连接池,自定义的用户变量又没有正确初始化,容易出现意想不到的问题。因为它实际上并没有被销毁,依旧记录者上一次的结果。

示例

我们来一个简单的示例,实现一个序号的功能,表和数据如下:

1

2

3

4

5

6

7

8

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:

1

2

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'

FROM employee, (SELECT @rowno := 0) r;

没有问题,一切都和预期一样,然后我们加一个 WHERE 条件试试:

1

2

3

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'

FROM employee, (SELECT @rowno := 0) r

WHERE @rowno = 0;

理论上来说,这是不应该返回数据的,但是它还就是返回了一条数据,就是 id 为 1 的那条。
为什么呢? WHERE 条件使用的 @rowno 一直都是同一个值 0 ,它不会因为 SELECT 上修改了就实时响应 。要实现
WHERE 的功能需要改写成如下:

1

2

3

4

5

6

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 中用户变量都不会按预期操作,它使用的是旧值,不会实时修改。

系统变量

会话变量

会话变量为服务器为每个客户端连接维护的变量。在客户端连接时,使用相应全局变量的当前值对客户端的会话变量进行初始化。

阅读剩余部分

相关阅读 >>

mysql的主键命名策略相关

mysql数据意外删了怎么办

mysql数据库锁定机制的介绍

mysql语句快速复习教程(全)

mysql的字符集操作命令总结

mysql怎么创建数据库

mysql文件都在哪个文件夹

mysql怎么删除某一字段的所有值

mysql中mul是什么意思

mysql高级查询函数有哪些

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

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

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

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

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...