9.表关系(外键)
外键: 如果一种表中的内容过于繁琐,我们可以将其划分成多张表,而外键就是通过一张表的字段可一查询到另一张表,多表创建是,应先创建表的基本字段,最后再添加外键字段
表关系
1. 一对一
2. 一对多
3. 多对多
4. 没有关系
一对一表关系
一对一的外键字段可以建在任何一张表中,但是,推荐建在查询频率较高的一张表中
一对多表关系
一对多的表关系外键字段建在多的一方
多对多表关系
多对多的外键字段需要建立第三张表来存储
外键约束
1. 在创建表的时候,应该先创建被关联表(没有外键字段的表),
2. 在录入数据的时候,应该先录入被关联表(没有外键字段的表),
3. 在录入数据的时候,应该录入被关联表中已经存在的值,
4. 如果对被关联表中的数据进行修改和删除的时候,需要把关联表中的数据也跟着修改或者删除(不现实)
# 需要使用以下方式创建表关系:
on update cascade # 级联更新
on delete cascade # 级联删除
但是,由于创建了外键关系和级联更新级联删除,那么,两张表之间就有了强制的约束关系,这样就增加了表与表之间的强耦合度;
所以,以后实际项目中,我们大多数不建立这种强耦合关系,我们使用的是建立逻辑意义上的关系
多表查询
子查询
子查询就是一条SQL语句的执行结果当成另一条SQL语句的执行条件,即分布操作
连表查询
连表查询就是把多张实际存在的表按照表关系连成一张虚拟表(不是实际存在的表,而是临时在内存中存的)
连表语法:
inner join # 内连接,数据只取两张表中共有的数据
left join # 左连接,数据以左表为准,展示左表所有的数据,右表没有的数据使用NULL填充
right join # 又连接,数据以右表为准,展示右表所有的数据,左表没有的数据使用NULL填充
union # 连接多条SQL语句执行的结果