多对一
一张表的外键对应另外一张表的主键:外键字段的值可以有多个也就是多条记录,另外一张表的主键是主键,意味着每条记录是唯一的,这就是多对一的关系。
一对一
可以在多对一的基础上进行设限就可以了,只要外键字段的值唯一对应一条主键字段的记录,对外键设置unique即可。
两张表:学生表和客户表
一对一:一个学生是一个客户,一个客户有可能变成一个学校,即一对一的关系select * from client;
| id | name | tel | |
|---|---|---|---|
| 1 | a | 111 | 111 |
| 2 | a | 111 | 111 |
| 3 | a | 111 | 111 |
| 4 | a | 111 | 111 |
| 5 | a | 111 | 111 |
| 6 | a | 111 | 111 |
| 7 | a | 111 | 111 |
| 8 | a | 111 | 111 |
| 9 | a | 111 | 111 |
| 10 | a | 111 | 111 |
| 11 | a | 111 | 111 |
create table client(id int auto_increment primary key,name varchar(10),te
l int,qq int);
Query OK, 0 rows affected (0.31 sec)mysql> insert into client(name,tel,qq) values(‘a’,111,111);
Query OK, 1 row affected (0.07 sec)mysql> create table stu(
-> id int auto_increment primary key,
-> course varchar(20),
-> cid int,
-> foreign key(cid) references client(id)
-> on delete cascade
-> on update cascade,
-> unique(cid)
-> );
Query OK, 0 rows affected (0.56 sec)
多对多
一张t1或者二张表t2,一张表t1对另一张表t2有多对一关系,另一张表t2对这张表t1也有多对一关系,这种情况下需要建一张新表t3来记录t1表和t2表的关系,这种就是多对多的关系。还要注意一点的是需要考虑场景:需不需要加unique对t3表内的字段进行联合约束,具体情况具体分析!
本文详细解释了一对一、多对一及多对多这三种数据库表间的关系,并通过实例展示了如何在MySQL中创建这些关系。

被折叠的 条评论
为什么被折叠?



