外键
外键字段>>>:部门编号
其实就是用来标识表与表之间的数据关系
# 简单的理解为该字段可以让你去到其他表中查找数据
表与表之间的关系
# 一对多、多对多、一对一、没有关系
### 一对多的表关系:
员工表:一个员工一个部门 x 部门表:一个部门有多个人 √
# 结论:一个可以,一个不可以,表关系就是:一对多
# 针对于一对多:外键字段要建在多的一方
在SQL层面建立一对多的关系: 先把基础表的中基础字段建立出来,然后在考虑外键字段
create table emp( # 员工表,关联
id int primary key auto_increment,
name varchar(32),
age int,
dep_id int,
foreign key(dep_id) references dep(id) # 让两张表建立了外键关系
on update cascade # 级联更新
on delete cascade # 级联删除
);
create table dep( # 部门表,被关联
id int primary key auto_increment,
dep_name varchar(32),
dep_desc varchar(32)
);
## 录入数据
insert into emp(name, age, dep_id) values('kevin', 20, 1);
insert into dep(dep_name,dep_desc) values('人事部', '管理人才');
# 注意:1、在创建表时,要先创建被关联表(没有外键字段的表)
2、在插入新数据时,要先确保被关联表的数据
3、在插入新数据时,外键字段只能填写被关联表中已有数据
4、只有添加了额外配置才能修改和删除被关联表的数据--级联更新、级联删除
### 多对多:
一本书多个作者 一个作者可以写多本书
# 结论:如果两个都可以,那么表关系就是'多对多'
# 针对于多对多的表关系:外键字段建在第三张表中
在SQL层面建立多对多的表关系
create table book(
id int primary key auto_increment,
title varchar(32),
price decimal(8,2)
);
create table author(
id int primary key auto_increment,
name varchar(32),
addr varchar(32)
);
create table book2author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references author(id) # 让两张表建立了外键关系
on update cascade # 级联更新
on delete cascade, # 级联删除
foreign key(author_id) references book(id) # 让两张表建立了外键关系
on update cascade # 级联更新
on delete cascade
);
## 录入数据
insert into book(title, price) values('金瓶梅', 1000);
insert into book(title, price) values('西游记', 2000);
insert into author(name, addr) values('zhangsan', 'beijing');
insert into author(name, addr) values('lisi', 'shanghai');
insert into book2author(book_id, author_id) values(1, 1);
insert into book2author(book_id, author_id) values(1, 2);
insert into book2author(book_id, author_id) values(2, 1);
insert into book2author(book_id, author_id) values(2, 2);
### 一对一:
作者表 作者详情表 /分为热数据和冷数据
# 针对一对一:两张表都可以,但是,推荐建在查询频率较高的一张表
在SQL层建立一对一的关系
create table author1(
id int primary key auto_increment,
name varchar(32),
gender varchar(32),
author_detail_id int unique,
foreign key(author_detail_id) references author_detail(id)
on update cascade
on delete cascade
);
create table autho