MySQL用表组织数据
用表组织数据
文章目录
- 用表组织数据
- 一.四种完整性约束
- 二.数值类型2-1
- 三.数值类型2-2
- 四.字符串.日期类型
- 五.设置
- 1.设置主键
- 2.设置标识列
- 3.设置非空
- 4.设置默认值
- 六.主外键建立后注意事项
一.四种完整性约束
1.域完整性 列
域完整性约束方法:限制数据类型,检查约束,外键约束,默认值,非空约束
2.实体完整性 行
实体完整性约束方法:唯一约束,主键约束,标识列
三个都在干一件事:让某些值唯一的不重复
主键约束里面就包含了唯一约束
主键要求不重复 并且不能为空
3.引用完整性 表与表之间
引用完整性约束方法:外键约束
4.自定义完整性 自己定义
自定义完整性约束方法:规则,存储过程,触发器
触发器:检查信用值
二.数值类型2-1
intyint 非常小的数据
smallint 较小的数据
mediumint 中等大小的数据
int 标准整数
bigint 较大的整数
float 单精度浮点数
bouble 双精度浮点数
单精度和双精度最大的区别:范围不一样 双精度更大
decimal 字符串形式的浮点数
三.数值类型2-2
unsigned属性
标识为无符号数
如果不设置:默认是有符号的
无符号影响的是负数
zerofill属性
宽度(位数)不足以0填充
此时是5个长 总长是5 值不足5时 用0填充
若某数值字段指定了zerofill属性,将自动添加unsigned属性
四.字符串.日期类型
char[(m)] 定长字符串
char和zerofill很像 设置长度是5 值是a 会在a后面补4个空格 也限定了字符串的长度 就是设置的长度
varchar[(m)] 可变字符串
设置长度是5 如果你输入的值是b 那他就是b 不补 因为是可变字符串
tinytext 微型文本串
text 文本串
放手机号 放邮箱 放家庭地址
date YYYY-MM-DD 年–月–日 日期格式
不需要精确到时分秒 可以用date 比如生日 但重复率高
datetime YY-MM-DD hh:mm:ss: 年–月–日–时–分–秒
精确到 年–月–日–时–分–秒 可以用 datetime
time hh:mm:ss: 时–分–秒
timestamp YYYYMMDDHHMMSS
tear YYYY格式的年份 年
若某日期字段默认值为当前日期,一般设置为timestamp类型
default:设置默认值
五.设置
1.设置主键
一个表可以没有主键
有主键的话 只能有一个主键 这一个主键可以由多个列组成
有多个列组成的主键 叫做复合主键
最少性:尽量选择单个键作为主键
稳定性:尽量选择数值更新少的列作为主键
2.设置标识列
auto incr:自增长 自动会勾上not null
标识列的特点:必须是int 系统自动管理
即便是删掉了 系统也不会重复 继续往后算
不一定是主键 通常把它当主键使用
3.设置非空
not null 不勾就是可空 勾了就是不能为空
是不勾 否勾
4.设置默认值
default 如果勾上not null 不写东西默认填上current_tlmestamp
可空的话就是空 什么都不填
六.主外键建立后注意事项
当主表中没有对应的记录时,不能将记录添加到子表
成绩表中不能出现在学员信息表中不存在的学号
不能更改主表中的值而导致子表中的记录孤立
把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变
子表存在与主表对应的记录,不能从主表中删除该行
不能把有成绩的学员删除了
删除主表前,先删子表
记录时,不能将记录添加到子表
成绩表中不能出现在学员信息表中不存在的学号
不能更改主表中的值而导致子表中的记录孤立
把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变
子表存在与主表对应的记录,不能从主表中删除该行
不能把有成绩的学员删除了
删除主表前,先删子表
先删学员成绩表、后删除学员信息表