整型
类型 |
占用字节 |
无符号范围 |
有符号范围 |
数据长度(几位数) |
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: 注释