一、数据类型
1、数值型
类型名称 | 说明 | 存储需求 |
TINYINT | 很小的整数 | 1个字节 |
SMALLINT | 小的整数 | 2个宇节 |
MEDIUMINT | 中等大小的整数 | 3个字节 |
INT (INTEGHR) | 普通大小的整数 | 4个字节 |
BIGINT | 大整数 | 8个字节 |
类型名称 | 说明 | 存储需求 |
FLOAT | 单精度浮点数 | 4 个字节 |
DOUBLE | 双精度浮点数 | 8 个字节 |
DECIMAL (M, D),DEC | 压缩的“严格”定点数 | M+2 个字节 |
2、日期类型
类型名称 | 日期格式 | 日期范围 | 存储需 求 |
YEAR | YYYY | 1901 ~ 2155 | 1 个字 节 |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 个字 节 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 个字 节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 个字 节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 个字 节 |
3、字符串类型
类型名称 | 说明 | 存储需求 |
CHAR(M) | 固定长度非二进制字符串 | M 字节,1<=M<=255 |
VARCHAR(M) | 变长非二进制字符串 | L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT | 非常小的非二进制字符串 | L+1字节,在此,L<2^8 |
TEXT | 小的非二进制字符串 | L+2字节,在此,L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此,L<2^24 |
LONGTEXT | 大的非二进制字符串 | L+4字节,在此,L<2^32 |
ENUM | 枚举类型,只能有一个枚举字 符串值 | 1或2个字节,取决于枚举值的数目 (最大值 为65535) |
SET | 一个设置,字符串对象可以有 零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员 的数量(最多64个成员) |
常用的是三个:
(1)char 长度是固定的字符串 name => char(10) => 如果我存放的字符是: jack => 这个时候会占用10个字节
(2)varchar 长度动态(可变长度)的字符串 name => varchar(10) => 如果存放的字符是: rose => 这个时候占用4个字节
(3)text 长度是动态(可变长度)的字符串 text存放的内容远超varchar(比如存放小说)
char 和 varchar 谁的效率高? char 的效率高 在真实情况下,到底用哪个数据类型?
真实情况: 要对数据进行分析,根据实际情况来确定,varchar肯定是用的最多的。
在程序里面有一个模式: 用时间换空间: varchar 用空间换时间:char
二、约束
1、主键约束
# 类似身份证 =》 唯一的标识 =》 能够代表这个人
primary key
2、唯一约束
# 手机号,QQ号 这些应该对于数据来说都是唯一的
unique
3、非空约束
# 意思是这个数据不能为null, 比如用户名 userName not null
not null
4、默认
# 相当于给一个默认值 比如 性别 默认 男
default 男
5、外键约束
# 这是关系型数据库为了维护数据完整性比较重要的一个体现
foreign key
6、检查约束
# 年龄 必须是 12~20
# MySQL中有check约束 但是不起作用
check