MySQL,@@是什么意思?

时间:2013-04-12 01:08:16

标签: mysql

我正在阅读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 个答案:

答案 0 :(得分:6)

@@ - System Vaiable

@@用于系统变量。使用@@的不同后缀,可以获得系统变量的会话或全局值。

当您将表达式中的系统变量称为@@ var_name时(即,当您未指定@@ global。或@@ session时),MySQL将返回会话值(如果存在),否则返回全局值。 (这与SET @@ var_name = value不同,后者始终引用会话值。)

@ - 用户定义的变量

而@用于用户定义的变量。

更多详情

链接上提供了更多详细信息 - http://dev.mysql.com/doc/refman/5.1/en/set-statement.html

答案 1 :(得分:5)

Using System Variables

  

要明确指出变量是会话变量,请在前面   它的名字由SESSION,@@ session。或@@。

组成

User-Defined Variables

  

用户变量写为@var_name,其中包含变量名称   var_name由字母数字字符“。”,“_”和“$”组成。一个   用户变量名称可以包含其他字符,如果您将其引用为   字符串或标识符(例如,@'my-var',@“my-var”,或   @ my-var)。

答案 2 :(得分:2)

来自同一documentation& using system variable docs -

  

要明确指出变量是全局变量,请在其前面   它的名字由GLOBAL或@@ global .. SUPER特权是必需的   设置全局变量。

     

要明确指出变量是会话变量,请在前面   它的名字由SESSION,@@ session。或@@。设置会话变量   不需要特殊权限,但客户只能更改自己的权限   会话变量,而不是任何其他客户端的变量。

     

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

     

支持系统变量的@@ var_name语法,以便与其他一些数据库兼容   系统