1.介绍
因为有foreign key的约束,使得两张表形成了三种关系
多对一
一对多
一对一
2.如何找出两张表之间的关系
分析步骤:
- 先站在左表的角度找
是否左表的多条记录对应着右表的一条记录,如果是,则证明左表的一个字段foreign key 右表的一个字段(通常是ID)
2.站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段 foreign key 左表一个字段(通常是ID)
3.总结:
多对一:
如果只有步骤一成立,则是左表多对一右表
如果只有步骤二成立,则是右表多对一左表
多对多:
如果步骤一和步骤二同时成立,则证明这俩张表多对多,需要证明这两张表的关系来存放二者的关系
一对一:
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可
3.表的三种关系
(1)书和出版社
一对多(或多对一):一个出版社可以出版多本书。看图说话。
关联方式:foreign key
create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, constraint fk_book_press foreign key(press_id) references press(id) on delete cascade on update cascade ); # 先往被关联表中插入记录 insert into press(name) values ('北京工业地雷出版社'), ('人民音乐不好听出版社'), ('知识产权没有用出版社') ; # 再往关联表中插入记录 insert into book(name,press_id) values ('九阳神功',1), ('九阴真经',2), ('九阴白骨爪',2), ('独孤九剑',3), ('降龙十巴掌',2), ('葵花宝典',3) ; 查询结果: mysql> select * from book; +----+-----------------+----------+ | id | name | press_id | +----+-----------------+----------+ | 1 | 九阳神功 | 1 | | 2 | 九阴真经 | 2 | | 3 | 九阴白骨爪 | 2 | | 4 | 独孤九剑 | 3 | | 5 | 降龙十巴掌 | 2 | | 6 | 葵花宝典 | 3 | +----+-----------------+----------+ rows in set (0.00 sec) mysql> select * from press; +----+--------------------------------+ | id | name | +----+--------------------------------+ | 1 | 北京工业地雷出版社 | | 2 | 人民音乐不好听出版社 | | 3 | 知识产权没有用出版社 | +----+--------------------------------+ rows in set (0.00 sec) 书和出版社(多对一)