您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > MySQL中文参考手册
译者:晏子(clyan@sohu.com)主页:第一章,前一章,下一章,最后一章,目录.7MySQL语言参考7.1文字:怎么写字符串和数字7.1.1字符串一个字符串是一个字符序列,由单引号(“'”)或双引号(“”)字符(后者只有你不在ANSI模式运行)包围。例如:'astring'anotherstring在字符串内,某个顺序有特殊的意义。这些顺序的每一个以一条反斜线(“\”)开始,称为转义字符。MySQL识别下列转义字符:\0一个ASCII0(NUL)字符。\n一个新行符。\t一个定位符。\r一个回车符。\b一个退格符。\'一个单引号(“'”)符。\一个双引号(“”)符。\\一个反斜线(“\”)符。\%一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。\_一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。注意,如果你在某些正文环境中使用“\%”或“\%_”,这些将返回字符串“\%”和“\_”而不是“%”和“_”。有几种方法在一个字符串内包括引号:*一个字符串内用“'”加引号的“'”可以被写作为“''”。*一个字符串内用“”加引号的“”可以被写作为“”。*你可以把一个转义字符(“\”)放在引号前面。*一个字符串内用“”加引号的“'”不需要特殊对待而且不必被重复或转义。同理,一个字符串内用“'”加引号的与“”也不需要特殊对待。下面显示的SELECT演示引号和转义如何工作:mysqlSELECT'hello','hello','hello','hel''lo','\'hello';+-------+---------+-----------+--------+--------+|hello|hello|hello|hel'lo|'hello|+-------+---------+-----------+--------+--------+mysqlSELECThello,'hello',''hello'',hello,\hello;+-------+---------+-----------+--------+--------+|hello|'hello'|''hello''|hello|hello|+-------+---------+-----------+--------+--------+mysqlSELECTThis\nIs\nFour\nlines;+--------------------+|ThisIsFourlines|+--------------------+如果你想要把二进制数据插入到一个BLOB列,下列字符必须由转义序列表示:NULASCII0。你应该用'\0'(一个反斜线和一个ASCII'0')表示它。\ASCII92,反斜线。用'\\'表示。'ASCII39,单引号。用“\'”表示。ASCII34,双引号。用“\”表示。如果你写C代码,你可以使用CAPI函数mysql_escape_string()来为INSERT语句转义字符。见20.3CAPI函数概述。在Perl中,你可以使用DBI包中的quote方法变换特殊的字符到正确的转义序列。见20.5.2DBI接口。你应该在任何可能包含上述任何特殊字符的字符串上使用转义函数!7.1.2数字整数表示为一个数字顺序。浮点数使用“.”作为一个十进制分隔符。这两种类型的数字可以前置“-”表明一个负值。有效整数的例子:12210-32有效浮点数的例子:294.42-32032.6809e+10148.00一个整数可以在浮点上下文使用;它解释为等值的浮点数。7.1.3十六进制值MySQL支持十六进制值。在数字上下文,它们表现类似于一个整数(64位精度)。在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。mysqlSELECT0xa+0-10mysqlselect0x5061756c;-Paul十六进制字符串经常被ODBC使用,给出BLOB列的值。7.1.4NULL值NULL值意味着“无数据”并且不同于例如数字类型的0为或字符串类型的空字符串。见18.15NULL值问题。当使用文本文件导入或导出格式(LOADDATAINFILE,SELECT...INTOOUTFILE)时,NULL可以用\N表示。见7.16LOADDATAINFILE句法。7.1.5数据库、表、索引、列和别名的命名数据库、表、索引、列和别名的名字都遵守MySQL同样的规则:注意,从MySQL3.23.6开始规则改变了,此时我们引入了用'引用的标识符(数据库、表和列命名)(如果你以ANSI模式运行,也将用于引用标识符)。标识符最大长度允许的字符数据库64在一个目录名允许的任何字符,除了/.表64在文件名中允许的任何字符,除了/或.列64所有字符别名255所有字符注意,除了以上,你在一个标识符中不能有ASCII(0)或ASCII(255)。注意,如果标识符是一个限制词或包含特殊字符,当你使用它时,你必须总是用`引用它:SELECT*from`select`where`select`.id100;在MySQL的先前版本,命名规则如下:*一个名字可以包含来自当前字符集的数字字母的字符和“_”和“$”。缺省字符集是ISO-8859-1Latin1;这可以通过重新编译MySQL来改变。见9.1.1用于数据和排序的字符集。*一个名字可以以在一个名字中合法的任何字符开始。特别地,一个名字可以以一个数字开始(这不同于许多其他的数据库系统!)。然而,一个名字不能仅仅由数字组成。*你不能在名字中使用“.”,因为它被用来扩充格式,你能用它引用列(见下面)。建议你不使用象1e这样的名字,因为一个表达式如1e+1是二义性的。它可以解释为表达式1e+1或数字1e+1。在MySQL中,你能使用下列表格的任何一种引用列:列引用含义col_name来自于任意表的列col_name,用于包含该表的一个列的查询中tbl_name.col_name来自当前的数据库的表tbl_name的列col_namedb_name.tbl_name.col_name行列col_name从表格tbl_name数据库db_name。这个形式在MySQL3.22或以后版本可用。`column_name`是一个关键词或包含特殊字符的列。在一条语句的列引用中,你不必指定一个tbl_name或db_name.tbl_name前缀,除非引用会有二义性。例如,假定表t1和t2,每个均包含列c,并且你用一个使用t1和t2的SELECT语句检索c。在这种情况下,c有二义性,因为它在使用表的语句中不是唯一的,因此你必须通过写出t1.c或t2.c来指明你想要哪个表。同样,如果你从数据库db1中一个表t和在数据库db2的一个表t检索,你必须用db1.t.col_name和db2.t.col_name引用这些数据表的列。句法.tbl_name意味着在当前的数据库中的表tbl_name,该句法为了ODBC的兼容性被接受,因为一些ODBC程序用一个“.”字符作为数据库表名的前缀。7.1.5.1名字的大小写敏感性在MySQL中,数据库和表对应于在那些目录下的目录和文件,因而,内在的操作系统的敏感性决定数据库和表命名的大小写敏感性。这意味着数据库和表名在Unix上是区分大小写的,而在Win32上忽略大小写。注意:在Win32上,尽管数据库和表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下列查询将不工作,因为它作为my_table和作为MY_TABLE引用一个表:mysqlSELECT*FROMmy_tableWHEREMY_TABLE.col=1;列名在所有情况下都是忽略大小写的。表的别名是区分大小写的。下列查询将不工作,:因为它用a和A引用别名:mysqlSELECTcol_nameFROMtbl_nameASaWHEREa.col_name=1ORA.col_name=2;列的别名是忽略大小写的。7.2用户变量MySQL支持线程特定的变量,用@variablename句法。一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。缺省字符集是ISO-8859-1Latin1;这可以通过重新编译MySQL改变。见9.1.1用于数据和排序的字符集。变量不必被初始化。缺省地,他们包含NULL并能存储整数、实数或一个字符串值。当线程退出时,对于一个线程的所有变量自动地被释放。你可以用SET句法设置一个变量:SET@variable={integerexpression|realexpression|stringexpression}[,@variable=...].你也可以用@variable:=expr句法在一个表达式中设置一个变量:select@t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;+----------------------+------+------+------+|@t1:=(@t2:=1)+@t3:=4|@t1|@t2|@t3|+----------------------+------+------+------+|5|5|1|4|+----------------------+------+------+------+(这里,我们不得不使用:=句法,因为=是为比较保留的)7.3列类型MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是255。D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。TINYINT[(M)][UNSIGNED][ZEROFILL]一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。SMALLINT[(M)][UNSIGNED][ZEROFILL]一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。MEDIUMINT[(M)][UNSIGNED][ZEROFILL]一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。INT[(M)][UNSIGNED][ZEROFILL]一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。INTEGER[(M)][UNSIGNED][ZEROFILL]这是INT的一个同义词。BIGINT[(M)][UNSIGNED][ZEROFILL]一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是=24,对一个双精度浮点数,是在25和53之间,这些类型如
本文标题:MySQL中文参考手册
链接地址:https://www.777doc.com/doc-5056553 .html