mysql手册.docx
- 文档编号:8471939
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:117
- 大小:106.50KB
mysql手册.docx
《mysql手册.docx》由会员分享,可在线阅读,更多相关《mysql手册.docx(117页珍藏版)》请在冰豆网上搜索。
mysql手册
MySQL中文参考手册
7MySQL语言参考
7.1文字:
怎么写字符串和数字
7.1.1字符串
一个字符串是一个字符序列,由单引号(“'”)或双引号(“"”)字符(后者只有你不在ANSI模式运行)包围。
例如:
'astring'"anotherstring"
在字符串内,某个顺序有特殊的意义。
这些顺序的每一个以一条反斜线(“\”)开始,称为转义字符。
MySQL识别下列转义字符:
\0一个ASCII0(NUL)字符。
\n一个新行符。
\t一个定位符。
\r一个回车符。
\b一个退格符。
\'一个单引号(“'”)符。
\"一个双引号(“"”)符。
\\一个反斜线(“\”)符。
\%一个“%”符。
它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。
\_一个“_”符。
它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。
注意,如果你在某些正文环境中使用“\%”或“\%_”,这些将返回字符串“\%”和“\_”而不是“%”和“_”。
有几种方法在一个字符串内包括引号:
∙一个字符串内用“'”加引号的“'”可以被写作为“''”。
∙一个字符串内用“"”加引号的“"”可以被写作为“""”。
∙你可以把一个转义字符(“\”)放在引号前面。
∙一个字符串内用“"”加引号的“'”不需要特殊对待而且不必被重复或转义。
同理,一个字符串内用“'”加引号的与“"”也不需要特殊对待。
下面显示的SELECT演示引号和转义如何工作:
mysql>SELECT'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|
+-------+---------+-----------+--------+--------+
mysql>SELECT"This\nIs\nFour\nlines";
+--------------------+
|This
Is
Four
lines|
+--------------------+
如果你想要把二进制数据插入到一个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数字
整数表示为一个数字顺序。
浮点数使用“.”作为一个十进制分隔符。
这两种类型的数字可以前置“-”表明一个负值。
有效整数的例子:
1221
0
-32
有效浮点数的例子:
294.42
-32032.6809e+10
148.00
一个整数可以在浮点上下文使用;它解释为等值的浮点数。
7.1.3十六进制值
MySQL支持十六进制值。
在数字上下文,它们表现类似于一个整数(64位精度)。
在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。
mysql>SELECT0xa+0
->10
mysql>select0x5061756c;
->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`.id>100;
在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_name
db_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引用一个表:
mysql>SELECT*FROMmy_tableWHEREMY_TABLE.col=1;
列名在所有情况下都是忽略大小写的。
表的别名是区分大小写的。
下列查询将不工作,:
因为它用a和A引用别名:
mysql>SELECTcol_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到184********709551615。
注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!
注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!
这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。
一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。
FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。
在MySQL3.23中,这是一个真正的浮点值。
在更早的MySQL版本中,FLOAT(precision)总是有2位小数。
该句法为了ODBC兼容性而提供。
FLOAT[(M,D)][ZEROFILL]
一个小(单精密)浮点数字。
不能无符号。
允许的值是-3.402823466E+38到-1.175494351E-38,0和1.175494351E-38到3.402823466E+38。
M是显示宽度而D是小数的位数。
没有参数的FLOAT或有<24的一个参数表示一个单精密浮点数字。
DOUBLE[(M,D)][ZEROFILL]
一个正常大小(双精密)浮点数字。
不能无符号。
允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。
M是显示宽度而D是小数位数。
没有一个参数的DOUBLE或FLOAT(X)(25<=X<=53)代表一个双精密浮点数字。
DOUBLEPRECISION[(M,D)][ZEROFILL]
REAL[(M,D)][ZEROFILL]
这些是DOUBLE同义词。
DECIMAL[(M[,D])][ZEROFILL]
一个未压缩(unpack)的浮点数字。
不能无符号。
行为如同一个CHAR列:
“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。
小数点,并且对于负数,“-”符号不在M中计算。
如果D是0,值将没有小数点或小数部分。
DECIMAL值的最大范围与DOUBLE相同,但是对一个给定的DECIMAL列,实际的范围可以通过M和D的选择被限制。
如果D被省略,它被设置为0。
如果M被省掉,它被设置为10。
注意,在MySQL3.22里,M参数包括符号和小数点。
NUMERIC(M,D)[ZEROFILL]
这是DECIMAL的一个同义词。
DATE
一个日期。
支持的范围是'1000-01-01'到'9999-12-31'。
MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。
DATETIME
一个日期和时间组合。
支持的范围是'1000-01-0100:
00:
00'到'9999-12-3123:
59:
59'。
MySQL以'YYYY-MM-DDHH:
MM:
SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。
TIMESTAMP[(M)]
一个时间戳记。
范围是'1970-01-0100:
00:
00'到2037年的某时。
MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。
一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。
你以可以通过赋给它一个NULL值设置它为当前的日期和时间。
见7.3.6日期和时间类型。
TIME
一个时间。
范围是'-838:
59:
59'到'838:
59:
59'。
MySQL以'HH:
MM:
SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。
YEAR[(2|4)]
一个2或4位数字格式的年(缺省是4位)。
允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069(70-69)。
MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。
(YEAR类型在MySQL3.22中是新类型。
)
CHAR(M)[BINARY]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。
M的范围是1~255个字符。
当值被检索时,空格尾部被删除。
CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词。
NATIONALCHAR(短形式NCHAR)是ANSISQL的方式来定义CHAR列应该使用缺省字符集。
这是MySQL的缺省。
CHAR是CHARACTER的一个缩写。
[NATIONAL]VARCHAR(M)[BINARY]
一个变长字符串。
注意:
当值被存储时,尾部的空格被删除(这不同于ANSISQL规范)。
M的范围是1~255个字符。
VARCHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词值。
见7.7.1隐式列指定变化。
VARCHAR是CHARACTERVARYING一个缩写。
TINYBLOB 和TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
见7.7.1隐式列指定变化。
BLOB 和TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。
见7.7.1隐式列指定变化。
MEDIUMBLOB 和MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
见7.7.1隐式列指定变化。
LONGBLOB 和LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。
见7.7.1隐式列指定变化
ENUM('value1','value2',...)
枚举。
一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2',...,或NULL。
一个ENUM最多能有65535不同的值。
SET('value1','value2',...)
一个集合。
能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1','value2',...选出。
一个SET最多能有64个成员。
7.3.1列类型存储需求
对于每个由MySQL支持的列类型的存储需求在下面按类列出。
7.3.2数字类型
列类型
需要的存储量
TINYINT
1字节
SMALLINT
2个字节
MEDIUMINT
3个字节
INT
4个字节
INTEGER
4个字节
BIGINT
8个字节
FLOAT(X)
4如果X<=24或8如果25<=X<=53
FLOAT
4个字节
DOUBLE
8个字节
DOUBLEPRECISION
8个字节
REAL
8个字节
DECIMAL(M,D)
M字节(D+2,如果M NUMERIC(M,D) M字节(D+2,如果M 7.3.3日期和时间类型 列类型 需要的存储量 DATE 3个字节 DATETIME 8个字节 TIMESTAMP 4个字节 TIME 3个字节 YEAR 1字节 7.3.4串类型 列类型 需要的存储量 CHAR(M) M字节,1<=M<=255 VARCHAR(M) L+1字节,在此L<=M和1<=M<=255 TINYBLOB,TINYTEXT L+1字节,在此L<2^8 BLOB,TEXT L+2字节,在此L<2^16 MEDIUMBLOB,MEDIUMTEXT L+3字节,在此L<2^24 LONGBLOB,LONGTEXT L+4字节,在此L<2^32 ENUM('value1','value2',...) 1或2个字节,取决于枚举值的数目(最大值65535) SET('value1','value2',...) 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员) VARCHAR和BLOB和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸。 例如,一个VARCHAR(10)列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度(L),加上1个字节以记录字符串的长度。 对于字符串'abcd',L是4而存储要求是5个字节。 BLOB和TEXT类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。 如果一个表包括任何变长的列类型,记录格式将也是变长的。 注意,当一个表被创建时,MySQL可能在某些条件下将一个列从一个变长类型改变为一个定长类型或相反。 见7.7.1隐式列指定变化。 一个ENUM对象的大小由不同枚举值的数量决定。 1字节被用于枚举,最大到255个可能的值;2个字节用于枚举,最大到65535值。 一个SET对象的大小由不同的集合成员的数量决定。 如果集合大小是N,对象占据(N+7)/8个字节,四舍五入为1,2,3,4或8个字节。 一个SET最多能有64个成员。 7.3.5数字类型 MySQL支持所有的ANSI/ISOSQL92的数字类型。 这些类型包括准确数字的数据类型(NUMERIC,DECIMAL,INTEGER,和SMALLINT),也包括近似数字的数据类型(FLOAT,REAL,和DOUBLEPRECISION)。 关键词INT是INTEGER的一个同义词,而关键词DEC是DECIMAL一个同义词。 NUMERIC和DECIMAL类型被MySQL实现为同样的类型,这在SQL92标准允许。 他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。 当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定;例如: salaryDECIMAL(9,2) 在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数。 因此,在这种情况下,能被存储在salary列中的值的范围是从-9999999.99到9999999.99。 在ANSI/ISO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)