表与表之间关系?
1对1
多对多
什么是1对多?
在多的一方创建一个外键字段,把这个外键字段设置成外键,对应 少的一方主键
-- 约束插入外键字段时候,数据必须关联表中已经存在的数据
外键类型和关联字段类型相同
插入时候,先插入关联表数据,在插入原表数据
如何通过命令创建1对多关系?
-- 在创建表时候创建外键
constraint 外键名 foreing key (外键字段) references 关联表名(关联字段)
-- 在表外外键操作
-- alter table 表名 drop foreign key 外键名 -- 删除外键
-- alter table 表名 add constraint 外键名字 foreign key (外键字段) reference 关联表名(字段)
外键名命名规则 :fk_表名第一个字母_关联表第一个字母
如何通过命令创建多对多关系?
-- 创建第三张表保存中间关,保存两个多的一方id,
在第三张表中创建两个外键分别对应两张表的id,
可以一个id,也可以两个外键联合起来做id
-- 第三张表如何命令?
表1名_to_表2名
-- 字段名怎么创建?
表1名_id 表2名_id
为何两个外键可以联合做主键?
因为每个外键都是组合起来都是唯一的
如何使两张表建立关系?
通过insert在第三张表中插入数据,前提是关联的两张表中有这个id
如何通过连表查询?
-- 1对多查询
select 表名.字段,关联表.字段 from 表名 left join 关联表名 on 表名.外键字段 = 关联表名.id where 条件
-- A left join B on 关系
-- 以A为主,可以把A中所有数据查出,只显示A对应的B数据,可以进行多次连接,那么说明主表有多个外键
-- right join 以B为主,可以把B中所有数据查出,只显示B对应的A数据
-- inner join 把没有对应关系的忽略掉
-- 多对多查询?
-- select 字段,+ form 第三张表名
lelft join 第一张表名 on 第三张表名. 第一张表名_id = 第一张表名.id
lelft join 第二张表名 on 第三张表名. 第二张表名_id = 第二张表名.id
where 条件
-- 本质上是双向的1对多,通过外键表连接关联表
如何进行关系分析?
-- 求两者之间的关系,要用两个方向去看,
先把前者看成1,对应后者有多少,再把后者看成1,
对应前者有多少,多对多其实本质上是双向的一对多