|
|
 |
 |
|
|
 |
|
MySQL数据库技术(08)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:2160 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
■ 浮点数。用于可能具有小数部分的数,如3 . 1 4 1 5 9、- . 0 0 2 7 3、- 4 . 7 8、或3 9 . 3 E + 4。可将浮点数列类型用于有小数点部分或极大、极小的数。可能会表示为浮点数的值有农作物平均产量、距离、钱数(如物品价格或工资)、失业率或股票价格等等。整型值也可 以赋予浮点列,这时将它们表示为小数部分为零的浮点值。每种数值类型的名称和取值范围如表2 - 5所示。各种类型值所需的存储量如表2-6 所示。 CREATE TABLE 语句 本章中例子中大量使用了C R E ATE TABLE 语句。您应该对此语句相当熟悉,因为我们在第1章中的教程部分使用过它。关于C R E ATE TABLE 语句也可参阅附录D。

 MySQL 提供了五种整型: T I N Y I N T、S M A L L I N T、M E D I U M I N T、INT 和B I G I N T。I N T 为I N T E G E R的缩写。这些类型在可表示的取值范围上是不同的。整数列可定义为UNSIGNED 从而禁用负值;这使列的取值范围为0 以上。各种类型的存储量需求也是不同的。 取值范围较大的类型所需的存储量较大。 MySQL 提供三种浮点类型: F L O AT、DOUBLE 和D E C I M A L。与整型不同,浮点类型不能是UNSIGNED 的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)。 DOUBLE PRECISION[(M, D)] 和REAL[(M, D)] 为DOUBLE[(M, D)] 的同义词。而NUMERIC(M, D) 为DECIMAL(M, D) 的同义词。F L O AT(4) 和F L O AT(8) 是为了与ODBC 兼容而提供的。在MySQL 3.23 以前,它们为F L O AT(10, 2) 和DOUBLE(16, 4) 的同义词。自MySQL 3.23 以来,F L O AT(4) 和F L O AT(8) 各不相同,下面还要介绍。 在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,如人员年龄或兄弟姐妹数,则TINYINT 最合适。MEDIUMINT 能够表示数百万的值并且可用于更多类型的值,但存储代价较大。BIGINT 在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型I N T类型的两倍,因此只在确实需要时才用。对于浮点值, D O U B L E占用F L O AT 的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的F L O AT 型来表示数据。 在定义整型列时,可以指定可选的显示尺寸M。如果这样,M 应该是一个1 到255 的整数。它表示用来显示列中值的字符数。例如, MEDIUMINT(4) 指定了一个具有4 个字符显示宽度的MEDIUMINT 列。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。如果某个特定值的可打印表示需要不止M 个字符,则显示完全的值;不会将值截断以适合M 个字符。对每种浮点类型,可指定一个最大的显示尺寸M 和小数位数D。M 的值应该取1 到2 5 5。D 的值可为0 到3 0,但是不应大于M - 2。(如果熟悉ODBC 术语,就会知道M 和D 对应于 ODBC 概念的“精度”和“小数点位数”)M 和D 对F L O AT 和DOUBLE 都是可选的,但对于DECIMAL 是必须的。在选项M 和D时,如果省略了它们,则使用缺省值。下面的语句创建了一个表,它说明了数值列类型的M 和D 的缺省值(其中不包括D E C I M A L,因为M 和D 对这种类型不是可选的):
 如果在创建表之后使用DESCRIBE my_table 语句,则输出的Field 和Type 列如下所示(注意,如果用MySQL 的3.23 以前的版本运行这个查询,则有一个小故障, 即BIGINT 的显示宽度将是21 而不是2 0。):
 每一个数字列都具有一个由列类型所决定的取值范围。如果打算插入一个不在列范围内的值,将会进行截取:MySQL 将剪裁该值为取值范围的边界值并使用这个结果。在检索时不进行值的剪裁。 值的剪裁根据列类型的范围而不是显示宽度进行。例如,一个SMALLINT(3) 列显示宽度为3 而取值范围为-32768 到3 2 7 6 7。值12345 比显示宽度大,但在该列的取值范围内,因此它可以插入而不用剪裁并且作为12345 检索。值99999 超出了取值范围,因此在插入时被剪裁为3 2 7 6 7。以后在检索中将以值3 2 7 6 7检索该值。 一般赋予浮点列的值被四舍五入到这个列所指定的十进制数。如果在一个F L O AT(8, 1)的列中存储1 . 2 3 4 5 6,则结果为1 . 2。如果将相同的值存入F L O AT(8, 4) 的列中,则结果为1 . 2 3 4 6。这表示应该定义具有足够位数的浮点列以便得到尽可能精确的值。如果想精确到千分之一,那就不要定义使该类型仅有两位小数。 浮点值的这种处理在MySQL 3.23 中有例外,F L O AT(4) 和F L O AT(8) 的性能有所变化。这两种类型现在为单精度( 4 字节)和双精度( 8 字节)的类型,在其值按给出的形式存放(只受硬件的限制)这一点上说,这两种类型是真浮点类型。 DECIMAL 类型不同于F L O AT 和D E C I M A L,其中DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。表2 - 7的前三行说明了这一点。如果固定M 而改变D,则其取值范围将随D 的变大而变小(但精度增加)。表2 - 7的后三行说明了这一点。
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|