表关系分为三种:一对一,一对多,多对多

一对多:一个学院对应多个学生,而一个学生只对应一个学院  

--  这儿classroom 是代表的学院。

-- 一对多 - A表的一条记录 对应 B 表多条记录,B表一条记录 只能对应 A表一条记录
-- 一个classroom对应多个student
-- 创建主表
create table if not exists classroom(
id int primary key auto_increment,
name varchar(20)
);
-- 创建子表
create table student(
id int primary key auto_increment,
name varchar(10),
cls_id int,
constraint `idx_cls_id` foreign key(cls_id) references classroom(id)
); insert into classroom(name) values('Python学院'),('Web学院'),('Java学院'); insert into student(name,cls_id) values('Which',1);
insert into student(name,cls_id) values('Tuple',1);
insert into student(name,cls_id) values('Tom',3);
insert into student(name,cls_id) values('Tim',2); -- select * from student;
+----+-------+--------+
| id | name | cls_id |
+----+-------+--------+
| 1 | Which | 1 |
| 2 | Tuple | 1 |
| 3 | Tom | 3 |
| 4 | Tim | 2 |
+----+-------+--------+

一对一:一个学生对应一个地址,一个地址也对应一个学生

-- 一对一 - A表的一条记录一定只能对应B表一条记录,B表的一条记录一定只能对应A表一条记录

-- 创建学生的地址表 学生和地址一对一关系
create table stu_address(
id int primary key auto_increment,
address varchar(10),
constraint `idx_adrs_id` foreign key(id) references student(id)
); insert into stu_address(address) values('地球'),('月球'),('Earth'),('Moon');
--在插入第五六条数据会失败,应为上表student只有4个学生,id最多为4
insert into stu_address(address) values('Earth'),('Moon'); -- select * from stu_address;
+----+---------+
| id | address |
+----+---------+
| 1 | 地球 |
| 2 | 月球 |
| 3 | Earth |
| 4 | Moon |
+----+---------+

多对多:老师对应多个学生,学生也可以对应多个老师

-- 创建老师表
create table teacher(
id int primary key auto_increment,
name char(12) not null );
insert into teacher(name) values('陈老师'),('郭老师'),('范老师'),('夏老师'); -- 创建老师学生中间表
create table stu_teacher(
st_id int,
te_id int,
primary key(st_id,te_id),
constraint `idx_st_id` foreign key(st_id) references student(id),
constraint `idx_te_id` foreign key(te_id) references teacher(id)
); insert into stu_teacher values(1,1),(1,2),(2,1),(1,3),(3,1);
-- select * from stu_teacher;
+-------+-------+
| st_id | te_id |
+-------+-------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 1 | 2 |
| 1 | 3 |
+-------+-------+
05-11 20:45