MySQL 数据库常用数据类型及约束
-
数据类型
说明:mysql 常见的几种数据类型
-
整数类型 (常用类型标粗)
类型 大小 范围(有符号) 范围(无符号) 用途 tinyint 1 个字节 (-128, 127) (0, 255) 小整数型 smallint 2 个字节 (-2^15, 2^15-1) (0, 2^16-1) mediumint 3 个字节 (-2^23, 2^23-1) (0, 2^23-1) int / integer 4 个字节 (-8 388 608, 8 388 607) (0, 65 535) 大整数型 bigint 8 个字节 (-2^63, 2^63-1) (0, 2^63-1) 解释:bit 一般用于状态的标记,因为 2 进制,所以一位二进制可以表示两种状态
-
浮点数类型
类型 大小 范围(有符号) 范围(无符号) 用途 decimal 可以单独使用,也可以精度先设置对 decimal(M,D) 为最多 M位,小数占 D 位
底层使用字符串存储,以提高精度依赖于 M,D 依赖于 M,D 小数值 float 4 个字节,可以单独使用,也可以精度设置 float(M,D) double 8 个字节,可以单独使用,也可以精度设置 double(M,D) bit bit(M),占 M 个位,M 的取值范围 [1, 64] ,默认是 1 位类型 -
字符串类型
类型 大小 用途 char 0-255 字节 定长字符串 varchar(M) 0-65 535 字节 变长字符串 text 0-65 535 字节 长文本字符串 解释:char(4),长度位 4 个字符,不足右边补空格,超出截取(效率高,浪费空间)。varchar(4),最长 4 个字符(实际长度 = 实际字符 + 2 个字节,用来记录个数的),可以不足,但超出截取(效率低,节省空间,Mysql 对其进一步优化,效率也不错,使用率高)。
-
日期和时间类型
类型 大小 范围 格式 用途 date 3 个字节 1000-01-01 / 9999-12-31 YYYY-MM-DD 日期值 time 3 个字节 -838:59:59 / 838:59:59 HH:MM:SS 时间值 datetime 8 个字节 1000-01-10 00:00:00 / 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合时间和日期值 year 1 个字节 1901 / 2155 YYYY 或者 YY(不推荐) 年份类型 timestamp 4 个字节 1970-01-01 00:00:00 / 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 时间戳(实际存储的是毫秒值,取出时进行计算) -
int 类型使用注意
int(M)
,M 表示宽度,需要结合和unsigned
zerofill
使用。设置zerofill
就意味着无符号unsigned
,表示无符号数(没有负数)zerofill
,表示使用 0 填充例如
int(3) zerofill
,整数位数不足 3 位的,左边使用 0 补齐,位数超出 3 位的,正常显示(默认情况 M 为 int 的存储能力大小,以空格填充) 。1
使用001
表示 。unsigned
和zerofill
只有整数类型数据拥有
-
日期输入注意
year
类型,可以输入 4 位数 ,如2020
,也可以输入 2 位数,如20
。如19-20
则表示2019-2020
。YYYY-MM-DD HH:MM:SS
YY-MM-DD HH:MM:SS
或YYYY-MM-DD
YY-MM-DD
,允许不严格输入:任何标点符都可以作为日期部分和时间部分的分隔符 。例如10-12-01 01:01:00
、10.12.01 01+20+09
、20@01@01 01^01^01
等等YYYYMMDD
和YYMMDD
没有间隔符的字符串:如果该字符串对于时间有意义,如20200820
和200505
可以被解释为2020-08-20
和20-0505
;如果该字符串对于时间没有意义,如20201490
(月份不合法) ,将解释为0000-00-00
对于包含日期部分并带有分隔符的字符串,如果日期小于 10 时,不需要指定 2 位数,如
2020-5-5
与2020-05-05
相同。对于包含时间部分并带有分隔符的字符串,如果时间小于 10 时,也不需要使用 2 位,如2020-05-05 05:05:05
与2020-5-5 5-5-5
相同。一般时间选用
timestamp
,有一个重要特征,如果输入null
自定设置为系统当前时间Java 与 Mysql 数据类型对应关系。官方参考地址 JDBC 版本 8
-
-
约束
-
主键:(primary key)
在表中唯一表示一个对象的属性,称为主键(对象为一行数据,属性为一列),不重复、默认不为空
-
非空:(not null)
输入数据时,不允许为空
-
唯一:(unique)
在表中,每一个对象的属性(添加 unique 约束)唯一
-
默认:(default)
录入数据时,该属性有默认值(年龄默认 20)不录入该属性,则该属性值为 20,如录入已录入为准
-
外键:(foreign key)
实体表的属性在关系表中存在,且可以标识实体表的每一个实体对象
-