3.2.4数字数据类型
3.2.4.4数字数据类型的属性
3.2.4.5选择数据类型
———————————————————————————————
3.2.2.4数字数据类型的属性
1.unsigned 属性(unsigned int)
1可以防止出现负值。适用于除bit类型除外的所有数字类型,但大部分情况是与各种整数类型一起使用。
2.让一个整数列具有unsigned属性,并不会改变底层数据类型的取值范围的宽度,而只是把这个范围向右平移。(unsigned值会把这种数据类型的范围扩大一倍)
3.为decimal或者浮点列加上unsigned属性,浮点值取值范围不会朝正数方向平移,相反,原取值范围上端保持不变,而下端会变为零(实际是砍掉了一半取值范围)
4.unsigned对应signed属性(默认允许带符号的一个属性)
2.zerofill属性(zerofill int)
1.适用于除bit外的所有数字类型。它会在列里的显示值前面填充若干零,使其宽度最终达到显示宽度。
2.对于长度大于zerofill给定的长度的数值,该数值不会被截断,将会完整显示。
3.对于赋予zerofill属性的列,将会自动被指认为unsigned属性。
3.auto_increment属性
1.用于整数和浮点数类型(通常不用于浮点数)
2.用于生成一组唯一标识符或序列值
3.通常情况下,在没有另外设定的情况下,auto_increment列的值将会从1 开始,每增加一行,序列值加一。如果进行了行的删除操作,那么该序列可能将会受到影响。是否发生,取决于存储引擎。
4.每个表最多只能有一个auto_increment列,且具有not null约束(默认not null也可以显式指定),并且必须被索引(一般设为primary key或unique索引),且通常使用unsigned属性。
create table ai
(
i int unsigned not null auto_increment primary(key)
);
create table ai
(
i int unsigned not null auto_increment unique
);
create table ai
(
i inr unsigned not null auto_increment,
primary key(i)
);
create table ai
(
i int unsigned not null auto_increment,
unique(i)
);
4.指定默认值操作:(3.2.3节)
create table t
(
i1 int default -1,
i2 int dafault 1,
i3 int default null
);
3.2.4.5选择数字数据类型
1.选择数字的数据类型时,要考虑数值的取值范围,并选择一个能够覆盖该范围的最小类型 (节省空间)
2.超出范围:如果MySQL启用严格的SQL模式没去只超出范围会导致一个错误
否则会被截断:替换为该列取值范围的相应端值点,同时生成一条警告信息。(对于-32768~32767的范围,99999会被截断为32767)
3.对于定点或浮点列,存储的小数位数多于精度值,会进行取舍(1.234 插入到float(8,1)结果将是1.2)所以选择时一定要考虑精确值。