继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

八月MySQL之常用数据类型

十月海洋
关注TA
已关注
手记 5
粉丝 4
获赞 116
数值类型

整型:分为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只能选择一个。

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP