欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL心得6--MySQL语言结构--常量、变量_MySQL

程序员文章站 2023-12-30 13:43:34
...
bitsCN.com 1.在MySQL数据库中,SQL语言由以下几部分组成。 (1)数据定义语言(DDL)。 用于执行数据库的任务,对数据库及数据库中的各种对象进行创建(create)、删除(drop)、修改(alter)等操作。如前所述,数据库对象主要包括:表、默认约束、规则、视图、触发器、存储过程等。不同数据库对象,其create、drop等语句的语法形式不同 (2)数据操纵语言(DML)。 用于操纵数据库中各种对象,检索和修改数据。DML包括的主要语句及功能如下表所示。语 句功 能说 明 SELECT从表或视图中检索数据 是使用最频繁的SQL语句之一 INSERT 将数据插入到表或视图中 UPDATE 修改表或视图中的数据 既可修改表或视图的一行数据,也可修改一组或全部数据 DELETE 从表或视图中删除数据 可根据条件删除指定的数据 (3)数据控制语言(DCL)。 用于安全管理,确定哪些用户可以查看或修改数据库中的数据,DCL包括的主要语句及功能如下表所示。 语 句 功 能 说 明 grant 授予权限 可把语句许可或对象许可的权限授予其他用户和角色 revoke 收回权限 与GRANT的功能相反,但不影响该用户或角色从其他角色中作为成员继承许可权限 (4) MySQL增加的语言元素。这部分不是SQL标准所包含的内容,而是为了用户编程的方便增加的语言元素。这些语言元素包括常量、变量、运算符、函数、流程控制语句和注解等。每个SQL语句都以分号结束,并且SQL处理器忽略空格、制表符和回车符。 2. 常量 1). 字符串常量 字符串是指用单引号或双引号括起来的字符序列,分为ASCII字符串常量和Unicode 字符串常量。 ASCII字符串常量是用单引号括起来的,由ASCII字符构成的符号串。举例:‘hello’ ‘How are you!’ Unicode 字符串常量与ASCII字符串常量相似,但它前面有一个N标志符(N代表 SQL-92标准中的国际语言(National Language))。N前缀必须为大写。只能用单引号括起字符串。举例:N‘hello’ Unicode 数据中的每个字符用两个字节存储,而每个ASCII字符用一个字节存储。 在字符串中不仅可以使用普通的字符,也可使用几个转义序列,它们用来表示特殊的字符,见下表。每个转义序列以一个反斜杠(“/”)开始,指出后面的字符使用转义字符来解释,而不是普通字符。注意 NUL 字节与 NULL 值不同,NUL为一个零值字节,而 NULL 代表没有值。 序 列 含 义 /0 一个ASCII 0 (NUL)字符 /n 一个换行符 /r 一个回车符(Windows中使用/r/n作为新行标志) /t 一个定位符 /b 一个退格符 /Z 一个ASCII 26字符(CTRL+Z) /' 一个单引号(“'”) /" 一个双引号(“"”) // 一个反斜线(“/”) /% 一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符 /_ 一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符 有以下几种方式可以在字符串中包括引号: ● 在字符串内用单引号“'”引用的单引号“'”可以写成“''”(两个单引号)。 ● 在字符串内用双引号“"”引用的双引号“"”可以写成“""”(两个双引号)。 ● 可以在引号前加转义字符(“/” )。 ● 在字符串内用双引号“"”引用的单引号“'”不需要特殊处理,不需要用双字符或转义。同样,在字符串内用单引号“'”引用的双引号“"”也不需要特殊处理。 2). 数值常量 数值常量可以分为整数常量和浮点数常量。 整数常量即不带小数点的十进制数,例如: 2,+1453,–2147483648。 浮点数常量是使用小数点的数值常量,例如: -1.39,1.5E5,0.5E-2。 3). 十六进制常量 MySQL支持十六进制值。一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符,其最前面有一个大写字母“X”或小写字“x”。在引号中只可以使用数字“0”到“9”及字母“a”到“f”或“A”到“F”。x'4D7953514C'表示字符串MySQL。 十六进制数值不区分大小写,其前缀“X”或“x”可以被“0x”取代而且不用引号。即X'41'可以替换为0x41,注意:“0x”中x一定要小写。 十六进制值的默认类型是字符串。如果想要确保该值作为数字处理,可以使用cast(...AS UNSIGNED)。 例: 执行如下语句: SELECT0x41, CAST(0x41 AS UNSIGNED); 如果要将一个字符串或数字转换为十六进制格式的字符串,可以用hex()函数。 例:将字符串CAT转换为16进制。 SELECT HEX('CAT'); 4). 日期时间常量 日期时间常量:用单引号将表示日期时间的字符串括起来构成。日期型常量包括年、月、日,数据类型为DATE,表示为“1999-06-17”这样的值。时间型常量包括小时数、分钟数、秒数及微秒数,数据类型为TIME,表示为“12:30:43.00013”这样的值。MySQL 还支持日期/时间的组合,数据类型为DATETIME或TIMESTAMP,如“1999-06-17 12:30:43”。DATETIME和TIMESTAMP的区别在于:DATETIME的年份在1000~9999之间,而TIMESTAMP的年份在1970~2037之间,还有就是TIMESTAMP在插入带微秒的日期时间时将微秒忽略。TIMESTAMP还支持时区,即在不同时区转换为相应时间。 需要要特别注意的是,MySQL 是按年-月-日的顺序表示日期的。中间的间隔符“-”也可以使用如“/”、“@”或“%”等特殊符号。 如下是日期时间常量的例子:'2008-05-12 14:28:24:00' 日期时间常量的值必须符合日期和时间的标准,如这样的日期是错误的:'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; 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的数据类型也会跟着改变。 (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 | [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权限)来设置系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。 例: 将全局系统变量sort_buffer_size的值改为25000。 SET @@global.sort_buffer_size=25000; 注意:如果在使用SET GLOBAL时同时使用了一个只能与SETSESSION同时使用的变量,或者如果在设置一个全局变量时未指定GLOBAL(或@@),则MySQL会产生错误。 (3_2).会话系统变量 会话系统变量(session system variable)只适用于当前的会话。大多数会话系统变量的名字和全局系统变量的名字相同。当启动会话的时候,每个会话系统变量都和同名的全局系统变量的值相同。一个会话系统变量的值是可以改变的,但是这个新的值仅适用于正在运行的会话,不适用于所有其他会话。 例: 将当前会话的SQL_WARNINGS变量设置为TRUE。 SET @@SQL_WARNINGS =ON; 说明:这个系统变量表示如果不正确的数据通过一条INSERT语句添加到一个表中,MySQL是否应该返回一条警告。默认情况下,这个变量是关闭的,设为ON表示返回警告。 例: 对于当前会话,把系统变量SQL_SELECT_LIMIT的值设置为10。这个变量决定了SELECT语句的结果集中的最大行数。 SET @@SESSION.SQL_SELECT_LIMIT=10; SELECT @@LOCAL .SQL_SELECT_LIMIT; 说明:在这个例子中,关键字SESSION放在系统变量的名字前面(SESSION和LOCAL可以通用)。这明确地表示会话系统变量SQL_SELECT_LIMIT和SET语句指定的值保持一致。但是,名为SQL_SELECT_LIMIT的全局系统变量的值仍然不变。同样地,改变了全局系统变量的值,同名的会话系统变量的值保持不变。 MySQL对于大多数系统变量都有默认值。当数据库服务器启动的时候,就使用这些值。也可以在C盘MYSQL文件夹下的my.ini选项文件中修改这些值。当数据库服务器启动的时候,这个文件被自动读取。 (1).如果要将一个系统变量值设置为MySQL默认值,可以使用default关键字。 例: 把SQL_SELECT_LIMIT的值恢复为默认值。 SET @@LOCAL.SQL_SELECT_LIMIT=DEFAULT; (2).使用SHOWVARIABLES语句可以得到系统变量清单。SHOW GLOBAL VARIABLES返回所有全局系统变量,而SHOW SESSION VARIABLES返回所有会话系统变量。如果不加关键字就默认为SHOWSESSION VARIABLES。 例: 得到系统变量清单。 SHOW VARIABLES; (3)要获得与样式匹配的具体的变量名称或名称清单,需使用LIKE子句,语句如下: SHOW VARIABLES LIKE 'max_join_size'; SHOW GLOBAL VARIABLES LIKE 'max_join_size'; (4)要得到名称与样式匹配的变量的清单,需使用通配符“%”,例如: SHOW VARIABLESLIKE 'character%';
作者 tianyazaiheruan bitsCN.com

上一篇:

下一篇: