整型:分为tinyint、smallint、mediumint、int、bigint这5个类型
对于整型数据,支持在类型名称后面的小括号内指定显示宽度。其中int默认宽度为11,整型数据指定宽度,常常配合zerofill关键字在创建列或者修改列时使用。eg:alter table mytable modify id int zerofill;
插入新的数据后,将会在数值前面用字符“0”填充剩余的宽度。如果插入了大于宽度限制的值,并不会截断和报错,而是按照类型的实际精度进行保存,此时,宽度格式已经没有意义,左边也不会填充任何的“0”字符。
所有的整数类型都有一个可选属性UNSIGNED(无符号),一般用于保存非负数或者较大的上限值,取值范围是大于等于0,小于原值的2倍。比如:int有符号范围是-128~+127,而无符号范围是0~225。
整数类型还有一个属性:AUTO_INCREMENT,一般用于产生唯一标识符或顺序值,注意:该属性只用于整数类型,并且一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为primary key或定义为unique键。
小数:分为浮点数(float、double)和定点数(decimal)。
注意:decimal如果不指定精度和标度,就会按照默认值decimal(10,0)来操作,会截取小数部分,因此,建议养成指定精度的习惯。
日期和时间类型
(由于日期和时间类型比较简单,这里只对TIMESTAMP进行说明)
TIMESTAMP:
当创建一个timestamp类型的列时,系统将会自动创建默认值常量日期CURRENT_TIMESTAMP(系统日期),插入NULL时,该列将会自动插入系统日期。注意:MySQL只给表中的第一个timestamp字段设置默认值为系统日期,如果有第二个timestamp类型,默认值将会设为0。eg:
alter table t1 add dt TIMESTAMP [not null default CURRENT_TIMESTAMP]; -- 也可以直接指定默认常量日期为CURRENT_TIMESTAMP
alter table t1 add dt2 TIMESTAMP;
desc t1;
使用DESC语句查看表结构如下:
上述可以修改dt2的默认值为其他常量日期,但是不能再修改为current_timestamp,因为mysql规定timestamp类型字段只能有一列的默认值为current_timestamp,如果强制修改,会报错。
TIMESTAMP还有一个重要特点就是和时区有关,两个不同时区的用户看到同一个日期可能是不一样的。TIMESTAMP会自动将数据库中插入的日期,转换为本地日期,所以TIMESTAMP更能反映出实际的日期,而datetime只能反映出插入时当地的时区。
timestamp最大时间是2038的某一天,所以不适合存放太久远的日期。
注意:TIMESTAMP受MySQL版本的影响很大,上述基于5.0为例。
字符串类型
char和varchar:
char列的长度固定为创建表时声明的长度,而varchar列中的值为可变长字符串。在检索的时候,char列删除了尾部的空格,而varchar则保留这些空格。
ENUM(枚举类型):
枚举类型的值范围需要在创建表时通过枚举方式显示指定,最多允许有65535个成员。定义语句:
alter table t1 add tag enum('y','n');
注意:当插入不在ENUM指定范围内的枚举值时,不会报错和返回警告,而是默认插入枚举中的第一个值。
SET:
和ENUM类似,最主要区别在于SET类型一次可以选取多个成员,而ENUM只能选择一个。
共同学习,写下你的评论
评论加载中...
作者其他优质文章