1.5 数据类型
主键和外键为数据库表添加了结构。它们确保了数据库中所有的表都是可访问的并且表之间有正确的关联。表中的每一列的另一个重要属性是其数据类型。
数据类型是定义一个列所能包含数据的类型的一种方法。要为每个表中的每一列都指定一个数据类型。遗憾的是,各种关系型数据库所允许的数据类型以及它们所代表的含义,有很大的不同。例如,Microsoft SQL Server、MySQL和Oracle,各自都有超过30种不同的、可用的数据类型。
即使只有3种数据库,我们也不可能去介绍每种可用的数据类型的细节及细微差别。但是,我所要做的,是通过讨论大部分数据库中常用的数据类型的主要类别,来概括这种情况。一旦了解了这些类别中的重要的数据类型,当遇到其他可能的数据类型时,也都可以迎刃而解。一般来讲,有3种重要的数据类型:数字(Numeric)、字符(Character)以及日期/时间(Date/Time)。
数字数据类型有很多种,包括位(bit)、整数(integer)、浮点数(decimal)和实数(real number)。bit是数字类型,它只允许有两个值,0和1。bit也经常用来定义只有true和false值的一个属性。integer是没有小数点的数字。decimal可以包含小数点。与bit、integer和decimal不同,实数的精确值只能是在内部近似地定义。所有数字类型的一个共同的显著特征,就是它们都能用于算术运算中。如下是Microsoft SQL Server、MySQL和Oracle中的数字类型的一些典型示例。
有时把字符类型称作string或character string类型。和数字类型不同,字符类型不再限定为数字。它们可以包括任意的字母、数字,甚至可以包括星号这样的特殊字符。当在SQL语句中为字符类型提供一个值时,总是需要用单引号把这个值括起来。相比之下,数字类型就从不使用引号。如下是字符类型的一些典型示例。
在第2个例子中,60601可能是一个邮政编码。乍看上去,它好像是一个数字类型,因为它只由数字组成。这种情形很常见。即便邮政编码只包含数字,但通常还是把它定义成字符数据类型,因为我们不需要对邮政编码进行算术运算。
日期/时间类型是用来表示日期和时间的。就像字符类型一样,日期/时间类型也需要用单引号括起来。这些数据类型允许对所涉及的日期进行特殊的运算。例如,我们可以使用一种特殊的方法,来计算任意两个日期之间的天数。如下是日期/时间类型的一些典型示例。