整型
类型
占用字节
无符号范围
有符号范围
数据长度(几位数)
tinyint
1
0 ~ 255
-128 ~ 127
3
smallint
2
0 ~ 65535
-32768 ~ 32767
5
mediumint
3
0 ~ 16777215
-8388608 ~ 8388608
8
int
4
0 ~ 2^32
-2^31 ~ 2^32-1
10
bigint
8
0 ~ 2^64
-2^63 ~ 2^63-1
20
浮点型和定点型
MySQL中使用浮点数类型和定点数类型来表示小数
浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decimal型。
Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的
数据类型
存储需求
有符号
无符号
FLOAT(单精浮点数)
4
-3.402823466E+38 ~ -1.175494351E-38
0和1.175494351E-38~3.402823466E+38
DOUBLE(双精浮点数)
8
-1.7976931348623157E+308~-2.2250738585072014E-308
0和2.2250738585072014E-308 ~ 1.7976931348623157E+308
DECIMAL(M,D)
或DEC(M,D)(定点数)
M > D,大小M + 2
M < D,大小D + 2
同DOUBLE
同DOUBLE
1、Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。
2、MySQL中可以指定浮点数和定点数的精度。其基本形式如下:数据类型(M,D)。其中,“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置。D参数成为标度,是指小数点后面的长度是D。M的默认值是10,最大值65,D的默认值是0,最大值30
3、对于定点数而言,decimal(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。
4、如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。
字符串类型
char(64)
1、定长字符,指定长度后,系统一定会分配指定的空间存储数据
2、基本语法:char(L),L代表字符数(中文与英文字母一样),L长度为0到255
varchar(64)
1、变长字符,指定长度后,系统会根据实际存储需要来计算长度
2、基本语法:varhcar(L),L代表字符数,L的长度理论值0到65535
3、因为varchar要根据系统自动分配空间记录数据长度,所以每个varchar数据产生后,系统会在数据后面增加1-2个字节的额外开销,用来保存数据所占用的空间长度
4、如果数据本身小于255个字符,额外开销一个字节;如果大于255个字符,额外开销两个字节
一个索引列的长度不能超过255字符(765个字节)(对于中文,一个中文占3个字节),utf8mb4中是4个字节
一般都定义为varchar(190)
char和varchar的区别
1、 当插入一条空数据的时候,Varchar占用1个字节来描述这条数据长度,而char则占用固定的4个字节,也就是4个空格
2、 char的插入数据效率比varchar高,varchar需要通过记录数来计算
选型
如果确定数据的长度、字符很短、经常发生变更,使用char,否则使用varchar
如果数据长度超过255个字符,不论是否固定长度,都会使用text
文本类型
文本类型:
Text:存储普通字符文本
Blob:存储二进制文本(图片,文件),一般不用,通常使用一个链接指向对应的文件本身
注意:
1、在选择对应的存储文本的时候,不要刻意使用text,因为系统会自动根据存储的数据长度选择合适的类型
2、在选择字符存储的时候,如果数据超过255个字符,一定要选择text存储
枚举类型enum
枚举类型
如果确定某个字段的数据只有固定的几个值,可以使用enum
基础语法:enum(数据值1,数据值2)
create table t1(sex enum('F','M','UN'));
集合类型set
集合:将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制,1表示被选中,0表示没有被选中
基本语法:set('值1','值2','值3')
系统为set提供了多个字节进行保存,系统会自动计算选择具体的存储单元
1个字节,set只能存储8个选项
2个字节,set只能存储16个选项
3个字节,set只能存储24个选项
8个字节,set只能存储64个选项
enum:单选(只能插入一个)
set:复选(可以插入多个)
时间类型
类型
大小
(字节)
范围
格式
用途
DATE
3
1000-01-01/9999-12-31
YYYY-MM-DD
日期值
TIME
3
'-838:59:59'/'838:59:59'
HH:MM:SS
时间值或持续时间
YEAR
1
1901 ~ 2155
YYYY
年份值
DATETIME
8
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
TIMESTAMP
4
1970-01-01 ~ 2038-1-19 11:14:07
YYYYMMDD
HHMMSS
混合日期和时间值,时间戳
列约束及属性
primary key :主建约束,同时保证唯一性和非空.每个表只能有一个PK,我们建议业务无关列(数字列)。
foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值。
not null :非空约束,保证字段的值不能为空
default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值
unique:唯一,保证唯一性但是可以为空,比如手机号。
auto_increment:自增长列
unsigned: 无符号
comment: 注释
标签:存储,set,字节,浮点数,数据类型,字段,定点数,MySQL,长度