MySQL中的变量分为自定义变量和系统变量,系统变量又可分为GLOBAL级别和SESSION级别
SET @var_name = expr [, @var_name = expr] ...
用户自定义变量只对当前session有效。对于SET可以使用 = 或者 := 作为赋值运算符,如果是在别的场景下,必须使用 := 来赋值,否则会被当作比较符。
示例:
mysql> set @v1=1, @v2=2, @v3=3;
mysql> select @v1, @v2, @v3, @v4 := @v1+@v2+@v3;
+------+------+------+--------------------+
| @v1 | @v2 | @v3 | @v4 := @v1+@v2+@v3 |
+------+------+------+--------------------+
| 1 | 2 | 3 | 6 |
+------+------+------+--------------------+
mysql> SET @v1 = X'42';
mysql> SET @v2 = X'42'+0;
mysql> SELECT @V1,@V2;
+------+------+
| @V1 | @V2 |
+------+------+
| B | 66 |
+------+------+
mysql> SET @v1 = b'1000010';
mysql> SET @v2 = b'1000010'+0;
mysql> SELECT @V1,@V2;
+------+------+
| @V1 | @V2 |
+------+------+
| B | 66 |
+------+------+
mysql> set @v2 = @v2 + 1;
mysql> select @v2;
+------+
| @v2 |
+------+
| 67 |
+------+
mysql> select @v2, @v2 := @v2+1;
+------+--------------+
| @v2 | @v2 := @v2+1 |
+------+--------------+
| 67 | 68 |
+------+--------------+
系统变量设置前面用两个@@
mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@global.max_connections = 1000;
mysql> SET SESSION sql_mode = 'TRADITIONAL';
mysql> SET @@session.sql_mode = 'TRADITIONAL';
mysql> SET @@sql_mode = 'TRADITIONAL';
下面的示例区分用户变量,session系统变量和global系统变量
mysql> SET @autocommit=100;
mysql> SET @@autocommit=100;
ERROR 1231 (42000): Variable 'autocommit' can't be set to the value of '100'
mysql> SET SESSION autocommit=1;
mysql> SET @@global.autocommit=0;
mysql> SELECT @autocommit, @@autocommit, @@global.autocommit;
+-------------------+----------------------+--------------------------------+
| @autocommit | @@autocommit | @@global.autocommit |
+-------------------+----------------------+--------------------------------+
| 100 | 1 | 0 |
+-------------------+----------------------+--------------------------------+
上面的示例中@autocommit是用户自定义的变量,@@session.autocommit是session级别的系统变量,@@global.autocommit是全局级别的系统变量。
1. 用户自定义变量
语法如下:SET @var_name = expr [, @var_name = expr] ...
用户自定义变量只对当前session有效。对于SET可以使用 = 或者 := 作为赋值运算符,如果是在别的场景下,必须使用 := 来赋值,否则会被当作比较符。
示例:
mysql> set @v1=1, @v2=2, @v3=3;
mysql> select @v1, @v2, @v3, @v4 := @v1+@v2+@v3;
+------+------+------+--------------------+
| @v1 | @v2 | @v3 | @v4 := @v1+@v2+@v3 |
+------+------+------+--------------------+
| 1 | 2 | 3 | 6 |
+------+------+------+--------------------+
mysql> SET @v1 = X'42';
mysql> SET @v2 = X'42'+0;
mysql> SELECT @V1,@V2;
+------+------+
| @V1 | @V2 |
+------+------+
| B | 66 |
+------+------+
mysql> SET @v1 = b'1000010';
mysql> SET @v2 = b'1000010'+0;
mysql> SELECT @V1,@V2;
+------+------+
| @V1 | @V2 |
+------+------+
| B | 66 |
+------+------+
mysql> set @v2 = @v2 + 1;
mysql> select @v2;
+------+
| @v2 |
+------+
| 67 |
+------+
mysql> select @v2, @v2 := @v2+1;
+------+--------------+
| @v2 | @v2 := @v2+1 |
+------+--------------+
| 67 | 68 |
+------+--------------+
2. 设置系统变量
系统变量设置前面用两个@@
2.1 全局变量
全局变量设置的时候,加上GLOBAL关键字,示例:mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@global.max_connections = 1000;
2.2 session级别变量
session级别的变量,可以加上SESSION关键字,示例:mysql> SET SESSION sql_mode = 'TRADITIONAL';
mysql> SET @@session.sql_mode = 'TRADITIONAL';
mysql> SET @@sql_mode = 'TRADITIONAL';
下面的示例区分用户变量,session系统变量和global系统变量
mysql> SET @autocommit=100;
mysql> SET @@autocommit=100;
ERROR 1231 (42000): Variable 'autocommit' can't be set to the value of '100'
mysql> SET SESSION autocommit=1;
mysql> SET @@global.autocommit=0;
mysql> SELECT @autocommit, @@autocommit, @@global.autocommit;
+-------------------+----------------------+--------------------------------+
| @autocommit | @@autocommit | @@global.autocommit |
+-------------------+----------------------+--------------------------------+
| 100 | 1 | 0 |
+-------------------+----------------------+--------------------------------+
上面的示例中@autocommit是用户自定义的变量,@@session.autocommit是session级别的系统变量,@@global.autocommit是全局级别的系统变量。