MySQL心得6--MySQL语言结构--常量、变量(二)
'1996-02-31'。
5). 位字段值
可以使用b'value'符号写位字段值。value是一个用0和1写成的二进制值。直接显示b'value'的值可能是一系列特殊的符号。例如,b'0'显示为空白,b'1'显示为一个笑脸图标。
使用bin函数可以将位字段常量显示为二进制格式。使用oct函数可以将位字段常量显示为数值型格式。
例: SELECT BIN(b'111101'+0), OCT(b'111101'+0);
6). 布尔值
布尔值只包含两个可能的值:TRUE和FALSE。FALSE的数字值为“0”,TRUE的数字值为“1”。
例: 获取TRUE和FALSE的值。 SELECT TRUE, FALSE; www.2cto.com
7). NULL值
NULL值可适用于各种列类型,它通常用来表示“没有值”、“无数据”等意义,并且不同于数字类型的“0”或字符串类型的空字符串。
3. 变量
1). 用户变量
用户可以在表达式中使用自己定义的变量,这样的变量叫做用户变量。
用户可以先在用户变量中保存值,然后在以后引用它,这样可以将值从一个语句传递到另一个语句。在使用用户变量前必须定义和初始化。如果使用没有初始化的变量,它的值为NULL。
用户变量与连接有关。也就是说,一个客户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
定义和初始化一个变量可以使用SET语句,语法格式为:
SET @user_variable1=expression1 [,user_variable2= expression2 , …]
其中,user_variable1、user_variable2为用户变量名,变量名可以由当前字符集的文字数字字符、“.”、“_”和“$”组成。当变量名中需要包含了一些特殊符号(如空格、#等)时,可以使用双引号或单引号将整个变量括起来。expression1、expression2为要给变量赋的值,可以是常量、变量或表达式。
例: 创建用户变量name并赋值为“王林”。
SET @name='王林';
注意:@符号必须放在一个用户变量的前面,以便将它和列名区分开。“王林”是给变量name指定的值。name的数据类型是根据后面的赋值表达式自动分配的。也就是说,name的数据类型跟 '王林' 的数据类型是一样的,字符集和校对规则也是一样的。如果给name变量重新赋不同类型的值,则name的数据类型也会跟着改变。 www.2cto.com
(1_1).还可以同时定义多个变量,中间用逗号隔开。
例:创建用户变量user1并赋值为1,user2赋值为2,user3赋值为3。 SET @user1=1, @user2=2,@user3=3;
(1 2).定义用户变量时变量值可以是一个表达式。
例:创建用户变量user4,它的值为user3的值加1。
SET @user4=@user3+1;
(1_3).在一个用户变量被创建后,它可以以一种特殊形式的表达式用于其他SQL语句中。变量名前面也必须加上符号@。
例1:查询上例中创建的变量name的值。 SELECT @name;
例2: 使用查询给变量赋值。
USE XSCJ;
SET @student=(SELECT 姓名 FROMXS WHERE 学号='081101');
例3: 查询表XS中名字等于例2中student值的学生信息。 SELECT 学号, 姓名, 专业名, 出生日期
FROM XS WHERE 姓名=@student;
说明:在SELECT语句中,表达式发送到客户端后才进行计算。这说明在HAVING、GROUP BY或ORDERBY子句中,不能使用包含SELECT列表中所设的变量的表达式。
对于SET语句,可以使用“=”或“:=”作为分配符。分配给每个变量的值可以为整数、实数、字符串或NULL值。也可以用其他SQL语句代替SET语句来为用户变量分配一个值。在这种情况下,分配符必须为“:=”,而不能用“=”,因为在非SET语句中“=”被视为比较操作符。
例: 执行如下语句,结果t2的值为7。
SELECT @t2:=(@t2:=2)+5 AS t2;
2). 系统变量
MySQL有一些特定的设置,当MySQL
数据库服务器启动的时候,这些设置被读取来决定下一步骤。例如,有些设置定义了数据如何被存储,有些设置则影响到处理速度,还有些与日期有关,这些设置就是
系统变量。和用户变量一样,系统变量也是一个值和一个数据类型,但不同的是,系统变量在MySQL服务器启动时就被引入并初始化为默认值。附录G中列出了绝大多数的系统变量。
例: 获得现在使用的MySQL版本。 SELECT @@VERSION ;
大多数的系统变量应用于其他SQL语句中时,必须在名称前加两个@符号,而为了与其他SQL产品保持一致,某些特定的系统变量是要省略这两个@符号的。如CURRENT_DATE(系统日期)、CURRENT_TIME(系统时间)、CURRENT_TIMESTAMP(系统日期和时间)和CURRENT_USER(SQL用户的名字)。
例: 获得系统当前时间。 SELECT CURRENT_TIME;
3)在MySQL中,有些系统变量的值是不可以改变的,例如VERSION和系统日期。而有些系统变量是可以通过SET语句来修改的,例如SQL_WARNINGS。 语法格式为:
SET system _var_name =expr www.2cto.com
| [global | session] system_var_name = expr
| @@ [global.| session.] system_var_name = expr
说明:system_var_name为系统变量名,expr为系统变量设定的新值。名称的前面可以添加GLOBAL或SESSION等关键字。
指定了GLOBAL或@@global.关键字的是全局系统变量(globalsystem variable)。指定了SESSION或@@session.关键字的则为会话系统变量(local systemvariable)。SESSION和@@session.还有一个同义词LOCAL和@@local.。如果在使用系统变量时不指定关键字,则默认为会话系统变量。
(3_1).全局系统变量
当MySQL启动的时候,全局系统变量就初始化了,并且应用于每个启动的会话。如果使用GLOBAL(要求SUPER权限)来设置系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。