数据类型

1、整型
有无符号:
create table t1(x tinyint) 超过范围会自动变成 -128/127 ,不会报错
create table t2(x tinyint unsigned)
指定字节宽度:
create table t3(id int(1) unsigned) 对于整型 后面的宽度并不是存储宽度,而是显示宽度
整型的宽度已经写死,不能变
create table t5(id int(5) unsigned zerofill);
insert into t5 value(1);
select * from t5;
超过5个, 这个限制就失效了,全部显示,不超过会补0
create table t6(id int unsigned);
desc t6;
发现不指定显大小,默认为10;
create table t7(id int );
默认11 多了一个负号
所以说整型类型的不用指定宽度,用默认宽度最合理。
2、浮点型
浮点类型; float double
float[(M,D)][unsigned][zerofill]
定义: 单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数,m最大值为255,d最大值为30
有符号: -3.402823466E+38 to -1.175494351E-38,
无符号:1.175494351E-38 to 3.402823466E+38
精确度:
随着小数的增多,精确度变得不准确
double[(M,D)][unsigned][zerofill]
定义: 双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数,m最大值为255,d最大值为30
有符号: -1.7976931348623157E+308 to -2.2250738585072014E-308
有符号: 2.2250738585072014E-308 to 1.7976931348623157E+308
精确度:
随着小数的增多,精度比float要高,但也会变得不准确
decimal[(m[,d])][unsigned][zerofill]
定义: 准确的小数值,m时数字总个数(负号不算),d是小数点后个数,m最大值为65,d最大值为30.
精确度:
随着小数的增多,精度始终准确
对于精确数值计算时需要用此类型
decalmal:定点数类型
能够存储精确值的原因在于其内部按照字符串存储
3、日期类型
now()是年月日 时分秒 完整时间,根据需求截取。
year类型 只截取 年
date类型截取年月日
time类型 截取完整时间
datetime 与timestamp的区别
1)、datetime的日期范围时1001-9999年,timestamp的日期范围是1970-2038年
2)、datetime存储时间与时区无关,timestamp存储时间与时区有关,显示的值也依赖于时区,在mysql服务器操作系统以及客户端都有时区的设置。
3)、datetime使用8字节的存储空间,timestamp的存储空间为4个字节,因此,timestamp比datetime的空间利用率更高。
4)、datetime的默认值为NULL;timestamp的字段默认不为空,默认值为当前时间,如果不做特殊处理,并且update语句中乜有指定该列的更新值,则默认更新为当前时间。
实例:

查看表:

4、枚举与集合类型
字段的值只能在给定的范围中选择,如单选框,多选框
enum单选只能在给定的范围内选一个值,如性别sex 男male/女female
set多选 在给定的范围内可以选择一个或以上
执行效果:
