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会将当前所有全局变量的值复制一份。来做为会话变量。{也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的。}
全局变量与会话变量的区别就在于,对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话。
参考链接:
- https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html
- https://dev.mysql.com/doc/refman/5.5/en/show-variables.html
- http://blog.knowsky.com/252519.htm
- http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/language-structure.html#variables
- =
- http://www.mysqlab.net/docs/view/refman-5.1-zh/chapter/index.html
- =
- http://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference
- =
- http://www.thegeekstuff.com/2013/09/mysql-select-command/
- https://dev.mysql.com/doc/refman/5.5/en/select.html
一些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 条评论
#查看MySQL当前的错误日志配置,缺省情况下位于数据目录(datadir)
`
mysql> show variables like ‘log_error’;
mysql> show variables like ‘datadir’;
或
shell> ps aux | grep –color -i ‘mysql’ #注意’–log-error’选项
`
http://blog.csdn.net/leshami/article/details/39759849
MySQL 中存储 bool 值该选用哪种数据类型(tinyint(1))
https://stackoverflow.com/questions/289727/which-mysql-data-type-to-use-for-storing-boolean-values
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/25/2153011.html
关于mysql中字符串转换成布尔类型数据
http://xdxd.love/2014/10/27/mysql%E5%B8%83%E5%B0%94%E7%B1%BB%E5%9E%8B%E5%92%8Cphp%E5%B8%83%E5%B0%94%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%8C%BA%E5%88%AB/
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
`