免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1075 | 回复: 0
打印 上一主题 下一主题

MySQL 之旅 语言结构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-30 14:01 |只看该作者 |倒序浏览

                                                  
第9章:语言结构
目录
9.1.
文字值
9.1.1.
字符串
9.1.2.
数值
9.1.3. 十六进制值
9.1.4.
布尔值
9.1.5. 位字段值
9.1.6.
NULL值
9.2.
数据库、表、索引、列和别名
9.2.1. 识别符限制条件
9.2.2.
识别符大小写敏感性
9.3.
用户变量
9.4.
系统变量
9.4.1.
结构式系统变量
9.5.
注释语法
9.6.
MySQL中保留字的处理
        一:文字值
  1,字符串
  
  字符串指用单引号(‘'’)或双引号(‘"’)引起来的字符序列。
  如果SQL服务器模式启用了NSI_QUOTES,则只用单引号引用字符串。用双引号引用的字符串被解释为一个识别符。
  在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:
  \0  ASCII 0(NUL)字符
  \'  单引号           \"  双引号
  \b  \t  \r  \n
  \\  反斜线“\”
  \_  字符“_”
  \%  字符“%”
  注意:
  1,这些序列对大小写敏感。例如,‘\b’解释为退格,但‘\B’解释为‘B’。  
  2,\%’和‘\_’序列用于搜索可能会解释为通配符的模式匹配环境中的‘%’和‘_’文字实例。'\%’和‘\_’序列用于搜索可能会解释为通配符的模式匹配环境中的‘%’和‘_’文字实例。
  有几种方式可以在字符串中包括引号:
    ·         
在字符串内用‘'’引用的‘'’可以写成‘''’
    ·         
在字符串内用‘"’引用的‘"’可以写成‘""’
    ·         
可以在引号前加转义字符(‘\’)。
    ·         
在字符串内用‘"’引用的‘'’不需要特殊处理,不需要用双字    符或转义。同样,在字符串内用‘'’引用的‘"’也不需要特殊处理。
  例子:
  下面的SELECT语句显示了引用和转义如何工作:
  mysql> select 'hello','"hello"',
         '""hello""','hel''lo','\'hello';
  +-------+---------+-----------+--------+--------+  | hello | "hello" | ""hello"" | hel'lo | 'hello |  +-------+---------+-----------+--------+--------+  | hello | "hello" | ""hello"" | hel'lo | 'hello |  +-------+---------+-----------+--------+--------+
  mysql> select "hello","'hello'",
         "''hello''","hel""lo","\"hello";
  +-------+---------+-----------+--------+--------+  | hello | 'hello' | ''hello'' | hel"lo | "hello |  +-------+---------+-----------+--------+--------+  | hello | 'hello' | ''hello'' | hel"lo | "hello |  +-------+---------+-----------+--------+--------+
  
  mysql> select 'This\nIs\nFour\nLines';
  这里可以看到MySQL对反斜杠的处理方式:
  mysql> select 'disappearing\ backslash';
  +------------------------+  | disappearing backslash |  +------------------------+  | disappearing backslash |  +------------------------+
  2,数值
  整数用一系列阿拉伯数字表示。浮点数使用‘.’作为十进制间隔符。两种类型的数值均可以在前面加一个‘-’来表示负值。
  合法整数的例子:
  1221   0   -32
  合法浮点数的例子:
  294.42   -32032.6809e+10    148.00
  整数可以用在浮点环境中;它被解释为与浮点数等效。
  3,十六进制值
  MySQL支持十六进制值。在数字上下文中,十六进制数如同整数(64位精度)。在字符串上下文,如同二进制字符串,每对十六进制数字被转换为一个字符:
  mysql> select x'4D7953514C';(x表示将后面的字符串作为十六进制值处理)
  +---------------+  | x'4D7953514C' |  +---------------+  | MySQL         |  +---------------+
  mysql> select 0xa+0;(+0表示将0xa作为数值处理)
  +-------+
  | 0xa+0 |
  +-------+
  |    10 |
  +-------+
  十六进制值的默认类型是字符串。如果想要确保该值作为数字处理,可以使用CAST(...AS UNSIGNED):
  mysql> select 0x5061756c;
  +------------+
  | 0x5061756c |
  +------------+
  | Paul       |
  +------------+
  mysql> select 0x41,cast(0x41 as unsigned);
  +------+------------------------+
  | 0x41 | cast(0x41 as unsigned) |
  +------+------------------------+
  | A    |                     65 |
  +------+------------------------+
  可以用HEX()函数将一个字符串或数字转换为十六进制格式的字符串:
  mysql> select hex('cat');
  +------------+
  | hex('cat') |
  +------------+
  | 636174     |
  +------------+
  mysql> select 0x636174;
  +----------+
  | 0x636174 |
  +----------+
  | cat      |
  +----------+
  4,布尔值
  常量TRUE等于1,常量FALSE等于0。常量名可以写成大写或小写。
  mysql> select true,TRUE,false,FALSE;
  +------+------+-------+-------+
  | TRUE | TRUE | FALSE | FALSE |
  +------+------+-------+-------+
  |    1 |    1 |     0 |     0 |
  +------+------+-------+-------+
  
  5,位置段值
  可以使用b'value'符号写位字段值。value是一个用0和1写成的二进制值。
  mysql> create table t(b bit(8));
  mysql> insert into t values (b'11111111');(位字段的写法)
  mysql> select b+0,bin(b+0),oct(b+0),hex(b+0) from t
  +------+----------+----------+----------+
  | b+0  | bin(b+0) | oct(b+0) | hex(b+0) |
  +------+----------+----------+----------+
  |  255 | 11111111 | 377      | FF       |
  +------+----------+----------+----------+
  
  6,Null值
  NULL值表示“没有数据”。NULL可以写成大写或小写。
  请注意NULL值不同于数字类型的0或字符串类型的空字符串。
  对于用LOAD DATA INFILE或SELECT ...INTO
OUTFILE执行的文本文件导入或导出操作,NULL用序列\N表示
  
        二:数据库,表,列,索引,别名
识别符
最大长度(字节)
允许的字符
数据库
64
目录名允许的任何字符,不包括‘/’、‘\’或者‘。’

64
文件名允许的任何字符,不包括‘/’、‘\’或者‘。’

64
所有字符
索引
64
所有字符
别名
255
所有字符
  
        识别符可以引起来也可以不引起来。如果识别符是一个保留字或包含特殊字符,无论何时使用,必须      将它引起来。如select * from `table_name`; 识别符的引用符是反勾号(‘`’),如果SQL服务器  模式包括ANSI_QUOTES模式选项,还可以用双引号将识别符引起来:
  
      mysql> create table "test" (col int);
        ERROR 1064 (42000): You have an error
      mysql> set sql_mode="ANSI_QUOTES";
      mysql> create table "test" (col int);
      Query OK, 0 rows affected (0.06 sec)
        如果你引用识别符,可以在识别符内包括识别符引用符。如果识别符内包括的字符与引用识别符的字      符相同,则需要用双字符。下面的语句创建一个名为a`b包含列c"d的表:
      注意这里开启了服务器模式的ansi_quotes选项。
      mysql> create table `a``b` (`c"d` int);
      Query OK, 0 rows affected (0.08 sec)
        识别符限制条件
        MySQL允许使用由单个识别符或多个识别符组成的名字。多部分名各组件之间应以句点(‘.’)间隔      开。多部分名的开头部分作为限定词,后面的识别符被解释。
  
列参考
含义
col_name
col_name,查询中使用的表包含有此名字的列。
tbl_name.col_name
默认数据库中的表tbl_name的列col_name
db_name.tbl_name.col_name
数据库db_name中的表tbl_name的列col_name
        如果多部分名的组件需要引用(使用到了保留字符),应分别将它们引起来而不要将整个名引起来。      例如,`my-tables`.`my-column`
有效,而`my-tables.my-column`无效。
  
       不需要在语句中为列指定tbl_namedb_name.tbl_name前缀,除非列会很模糊。假定表t1和      t2各包含一个列c,你使用SELECT语句在t1和t2中搜索c。在这种情况下,c很模糊,因为它在语句中      使用的表内不唯一。你必须用表名t1.c或t2.c限定它,表示指哪个表。同样,要想用同一语句搜索数      据库db1中的表t和数据库db2中的表t,你必须将那些表中的列指为db1.t.col_name和       db2.t.col_name。
       识别符大小写敏感型
  
       这依操作系统而定,比如在windows系统下对一个表进行查询,该表名既可以为大写也可以是小写。     但是这在Unix的操作系统则是行不通的。
       注释:尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引     用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tables和as
MY_tables:
     mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
       列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。
     默认情况,表别名在Unix中对大小写敏感,但在Windows或Mac OS
X中对大小写不敏感。下面的查询     在Unix中不会工作,因为它同时引用了别名a和A:
         mysql> select col_name frmo tb1_name as a
        -> where a.col_name=1 or A.col_name=2;
  
  
9.3用户变量
  
  用户变量的形式为@var_name,其中变量名var_name可以由当前字符集的文字数字字符、‘.’、‘_’和‘$’组成。
默认字符集是cp1252
(Latin1)。可以用mysqld的--default-character-set选项更改字符集。用户变量名对大小写不敏感。
  设置用户变量的一个途径是执行SET语句,对于SET,可以使用=或:=作为分配符。分配给每个变量的expr可以为整数、实数、字符串或者NULL值。如果使用没有初始化的变量,其值是NULL。
  mysql> set @t1=0,@t2=0,@t3=0;
  Query OK, 0 rows affected (0.01 sec)
  mysql> select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
  +----------------------+------+------+------+  | @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |  +----------------------+------+------+------+  |                    5 | 5    | 1    | 4    |  +----------------------+------+------+------+
  一般原则是不要在语句的一个部分为用户变量分配一个值而在同一语句的其它部分使用该变量。可能会得到期望的结果,但不能保证。
  设置变量并在同一语句中使用它的另一个问题是变量的默认结果的类型取决于语句前面的变量类型。
  9.4
  
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63463/showart_511907.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP