MySQL:@@ 是什么意思?

16

我正在阅读这个页面上的MySQL文档:http://dev.mysql.com/doc/refman/5.1/en/set-statement.html

它经常使用“@@”,但没有定义“@@”的含义。

另一个例子是在变量名称中:

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| server1    |
+------------+
1 row in set (0.00 sec)

mysql> select @hostname;
+-----------+
| @hostname |
+-----------+
| NULL      |
+-----------+
1 row in set (0.00 sec)

什么是 @ vs @@?

3个回答

19

@@ - 系统变量

@@ 用于表示 系统变量。通过在@@ 后添加不同的后缀,您可以获取系统变量的会话(session)全局(global)值。

当您在表达式中引用系统变量时,以 @@var_name 的形式表示(也就是说,没有指定 @@global.@@session.),MySQL 如果该会话存在则返回会话值,否则返回全局值。(这与SET @@var_name = value 不同,后者总是引用会话值。)


@ - 用户定义变量

@ 则用于表示用户定义变量


更多详细信息

要了解更多详细信息,请阅读官方 MySQL 参考手册中的以下部分:


9

使用系统变量

为了明确表示一个变量是会话变量,需要在变量名前加上 SESSION、@@session. 或 @@。

用户自定义变量

用户变量的写法为 @var_name,其中变量名 var_name 由字母、数字、“.”、“_” 和 “$” 组成。如果要使用其他字符作为变量名,需要将其作为字符串或标识符进行引用(例如,@'my-var'、@"my-var" 或 @my-var)。


2
从同一个 文档系统变量使用文档 -

为了明确表示一个变量是全局变量,可以在其名称前加上 GLOBAL 或 @@global.。设置全局变量需要 SUPER 权限。

为了明确表示一个变量是会话变量,可以在其名称前加上 SESSION、@@session. 或 @@。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其他任何客户端的会话变量。

LOCAL 和 @@local. 是 SESSION 和 @@session. 的同义词。

对于一些其他数据库系统的兼容性支持,系统变量可以使用 @@var_name 语法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接