一 数据类型和约束
根据不同的场景,需要不同的数据类型保存不同的数据,常用的数值类型、字符类型、时间日期类型
1 数值类型
备注:较为常用的数值类型 INT/INTEGER:表示整数;DOUBLE:表示浮点数;DECIMAL:设置自定义精度
2 日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
注:TIMESTAMP结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
3 字符串类型
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,前者为固定长度,后者根据内容变长。
结论:
- 经常变化的字段用VARCHAR
- 固定长度的用CHAR,优先用 VARCHAR
- 超过 255 字符的只能用VARCHAR 或者 TEXT
- 能用 VARCHAR 的地方不用TEXT
4 约束
- 主键primary key:物理上存储的顺序,主建约束,相当于唯一和非空约束组合
- 非空not null:此字段不允许填写空值
- 惟一unique:此字段的值不允许重复,可以为空
- 默认default:当不填写此值时会使用默认值,如果填写时以填写为准
- 外键foreign key:对关系字段进行约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值
- 自增约束AUTO_INCREMENT:标注当前字段数据默认 +1 一般配合主键使用,通过关键字AUTO_INCREMENT 添加
- 无符号unsigned:主要用于数值类型,无符号代表为正数,只能在表示数值类型后写。
5 数据库设计范式
- 字段不可分; 强调的是列的原子性,通俗理解即一个字段只存储一项信息
- 有主键,非主键字段依赖主键; 任意一个字段都只依赖表中的同一个字段;当存在多个主键的时候,才可能会发生不符合第二范式的情况。
- 非主键字段不能相互依赖; 每列都与主键有直接关系,不存在传递依赖