MySQL中的变量


MySQL中的变量分为用户变量系统变量

用户变量:

用户变量与数据库连接有关,在这个连接中声明的变量,在连接断开的时候,就会消失;在此连接中声明的变量无法在另一连接中使用;用户变量的变量名的形式为 @varname 的形式,名字必须以@开头。

声明变量的时候需要使用 set 语句,比如下面的语句声明了一个名为 @a 的变量。

set @a = 1;

声明一个名为@a的变量,并将它赋值为1,MySQL里面的变量是不严格限制数据类型的,它的数据类型根据你赋给它的值而随时变化。{SQL SERVER中使用declare语句声明变量,且严格限制数据类型。}

我们还可以使用 select 语句为变量赋值。

比如:

select @name:=user from mysql.user limit 0,1;
/* 注意等于号前面有一个冒号,后面的limit 0,1是用来限制返回结果的,相当于SQL SERVER里面的top 1 */

如果直接写:

select @name:=user from mysql.user;

如果这个查询返回多个值的话,那 @name 变量的值就是最后一条记录的 user 字段的值。

系统变量:

系统变量又分为全局变量(global variables)会话变量(session variables)

全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改 my.ini 这个配置文件来更改。

会话变量在每次建立一个新的连接的时候,由MySQL来初始化。MySQL会将当前所有全局变量的值复制一份。来做为会话变量。{也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的。}

全局变量与会话变量的区别就在于,对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话。

参考链接:
一些MySQL语句:
> show databases;
> select host,user,password from mysql.user;
> show processlist;
> show [global|session] variables;
> show variables like '%dir';
> show variables like 'version%';

&

> select version_compile_os;
ERROR 1054 (42S22): Unknown column 'version_compile_os' in 'field list'
> select @version_compile_os;
+---------------------+
| @version_compile_os |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

> select @@version_compile_os;
+----------------------+
| @@version_compile_os |
+----------------------+
| Linux                |
+----------------------+
1 row in set (0.00 sec)
,

《 “MySQL中的变量” 》 有 3 条评论

  1. mysql int field growing bigger than 11 digits
    https://stackoverflow.com/questions/7776862/mysql-int-field-growing-bigger-than-11-digits
    `
    即,一个典型的 int 类型使用 4 字节的存储空间,表示范围是:
    有符号类型(-2^31 ~ 2^31-1): -2147483648 to 2147483647
    无符号类型(0 ~ 2^32-1): 0 to 4294967295

    而,一个典型的 bigint 类型使用 8 字节的存储空间,表示范围是:
    有符号类型(-2^63 ~ 2^63-1): -9223372036854775808 to 9223372036854775808
    无符号类型(0 ~ 2^64-1): 0 to 18446744073709551615
    `

    Why can’t I insert 10 digits when my column is INT(10)
    https://stackoverflow.com/questions/14393672/why-cant-i-insert-10-digits-when-my-column-is-int10
    `
    为什么 int(10) 类型的字段无法存储 10位的整型数字?

    因为,一个典型的 int 类型使用 4 字节的存储空间,表示范围是:
    有符号类型(-2^31 ~ 2^31-1): -2147483648 to 2147483647
    无符号类型(0 ~ 2^32-1): 0 to 4294967295
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注