最新IBM水货笔记本价格,详细点击进入

查看完整版本: MySQL数据库技术(07)

风舞残阳 2008-4-2 17:54

MySQL数据库技术(07)

根据定义,[wiki]数据库[/wiki][wiki]管理[/wiki][wiki]系统[/wiki]的目的就是管理数据。即使一条简单的SELECT1语句也涉及表达式求值以产生一个整型数据值。My[wiki]SQL[/wiki]中的每个数据值都有[wiki]类[/wiki]型。例如,37.4是一个数,而“abc”是一个串。有时,数据的类型是明显的,因为在使用CREATETABLE语句时指定了作为表的组成部分定义的每个列的类型,如:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202926781.JPG[/img]

而有时,数据类型是不明确的,如在一个表达式中引用直接值时,将值传送给一个函数,或使用从该函数返回的值,如:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202926642.JPG[/img]

INSERT语句完成下列操作,这些操作全都涉及数据类型:
■将整数值14赋给整数列int_col。
■将串值“a”和“b”传递给函数CONCAT()。CONCAT()返回串值“ab”,这个串值被赋予串列str_col。
■将整数值19990115赋给日期列date_col。而这是不匹配的,因此,MySQL将自动进行数据类型转换。要有效地利用MySQL,必须理解其怎样处理数据。本章描述了MySQL能够处理的数据类型,并讨论了在处理这些数据类型时所出现的问题,主要内容如下:
■通用数据类型,包括NULL值。
■特殊数据类型,以及描述每种列类型的属性。有些列类型是相当常见的,如CHAR串类型。而有的如AUTO_INCREMENT整型和TIMESTAMP日期类型,其性能很特殊,应该加以理解以免出错。
■恰当地选择表的列类型。在创建表时,重要的是要了解怎样为自己的目的选择最好的类型,以及在几种类型都可以用于想要存储的值时选择一种类型。
■表达式求值规则。MySQL提供了许多可用于表达式的运算符和函数,以便对数据进行检索、显示和处理。表达式求值的规则包括类型转换规则,在一种类型的值用于另一类型的值的情况时需用到类型转换规则。理解何时进行类型转换以及怎样进行转换很重要;有的转换没有意义而且会产生错误值。将串“13”赋给整数列结果为值13,但是将串“abc”赋给该列得到0值,因为“abc”不是一个数。更坏的是,如果进行比较而不了解值的转换,可能会带来很大的危险,如在打算只对几行进行操作时,可能会更新或删除了表中的所有行。附录B和附录C提供了MySQL列类型、运算和函数的更多[wiki]信息[/wiki]。

[color=#0000ff]2.1MySQL数据类型
[/color]
MySQL有几种数据类型,下面分别进行介绍。
1.数值值
数值是诸如48或193.62这样的值。MySQL支持说明为整数(无小数部分)或浮点数(有小数部分)的值。整数可按十进制形式或十六进制形式表示。整数由数字序列组成。以十六进制形式表示的整数由“0x”后跟一个或多个十六进制数字(”0”到“9”及“a”到“f”)组成。例如,0x0a为十进制的10,而0xffff为十进制的65535。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。即0x0a和0x0A都是合法的,但0X0a和0X0A不是合法的。浮点数由一个阿拉伯数字序列、一个小数点和另一个阿拉伯数字序列组成。两个阿拉伯数字序列可以分别为空,但不能同时为空。MySQL支持[wiki]科学[/wiki]表示法。科学表示法由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”)和一个整数指数来表示。1.34E+12和43.27e-1都是合法的科学表示法表示的数。而1.34E12不是合法的,因为指数前的符号未给出。指数前的“e”也是一个合法的十六进制数字,因此有可能会弄错。数值前可放一个负号“-”以表示负值。
2.(字符)串值串是诸如“Madison,Wisconsin”或“patientshowsimprovement”这样的值。既可用单引号也可用双引号将串值括起来。串中可使用几个转义序列,它们用来表示特殊的字符,见表2-1。每个序列以一个反斜杠(“\”)开始,指出临时不同于通常的字符解释。注意NUL字节与NULL值不同;NUL为一个零值字节,而NULL为没有值。

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202926435.JPG[/img]

要在串中包括一个引号,可有如下三种选择:
■如果串是用相同的引号括起来的,那么在串中需要引号的地方双写引号即可。如:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202926424.JPG[/img]

■如果串是用另外的引号括起来的,则不需要双写相应引号。如:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202927719.JPG[/img]

■用反斜杠方式表示;这种方法不去管用来将串括起的是单引号还是双引号。如:

[img]http://www.wangyeba.com/Article/UploadFiles/200512/20051214202927408.JPG[/img]

在串的[wiki]环境[/wiki]中,可用十六进制常数来指定串值。其语法与前面描述的数值值相同,但是每对十六进制的数字都被看作ASCII代码并转换为字符,其结果用于串。例如,0x616263作为串时为“abc”。
3.日期和[wiki]时间[/wiki]值
日期和时间是一些诸如“1999-06-17”或“12:30:43”这样的值。MySQL还支持日期/时间的组合,如“1999-06-1712:30:43”。要特别注意这样一个事实,即MySQL是按年-月-日的顺序表示日期的。MySQL的初学者通常对这一点很惊奇,其实这是ANSISQL的[wiki]标准[/wiki]格式。可以利用DATE_FORMAT()函数以任意形式显示日期值,但是缺省显示格式首先显示年,而且输入值也必须首先给出年。
4.NULL值
NULL是一种“无类型”的值。它过去惯常表示的意思是“无值”、“未知值”、“丢失的值”、“溢出值”以及“没有上述值”等。可将NULL值插入表中、从表中检索它们,[wiki]测试[/wiki]某个值是否是NULL,但不能对NULL值进行[wiki]算术[/wiki]运算(如果对NULL进行算术运算,其结果为NULL)。
页: [1]
查看完整版本: MySQL数据库技术(07)