1.外键: 用来建立两张表之间的关系
- 一对多
- 多对多
- 一对一
研究表与表之间的关系:
1.定义一张 员工部门表
id, name, gender, dep_name, dep_desc
- 将所有数据存放在一张表中的弊端:
1.结构不清晰 ---> 不致命
2.浪费空间 ---> 不致命
3.可扩展性极差 ---> 不可忽视的弊端
- 类似于将所有python代码存放在一个py文件中,强耦合到一起了----> 解耦合 ----> 拆分表
- 拆分表解决以上问题.
- 需要给两张表之间,建立一种强有力的关系, 使用 “外键”
- !!!!! ****** 如何确认表与表之间的关系是 (一对多、多对多、一对一)
- 注意: 要确立两张表之间的关系,必须站在两个位置去思考:
- 站在员工表的位置: 多个员工能否对应一个部门? 能!!!
- 员工与部门: 多 对 一
- 员工表单向 多 对 一 部门表
- 站在部门表的位置: 多个部门能够对应一个员工? 不能!!!
总结: 凡是单向 多 对 一 的表关系,称之为 一对多 的外键关系。
- 外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)
- 一对多
# 创建两张表
1.必须先建立被关联表,再建立关联表
# 被关联表:
dep:
create table dep(
id int primary key auto_increment,
dep_name varchar(16),
dep_desc varchar(255)
);
# 关联表:
emp:
create table emp(
id int primary key auto_increment,
name varchar(16),
age int,
gender enum('male', 'female', 'others') default 'male',
dep_id int not null,
foreign key(dep_id) references dep(id)
);
注:KEY中MUL代表外键
# 插入数据:
- 1.必须先插入被关联表(dep)的数据,再插入关联表(emp)的数据。
# dep:
insert into dep(dep_name, dep_desc) values('nb_外交部', '国际形象大使部门'),
('sb_教学部', '造程序员部门!!!!'),
('技术部', '技术有限部门');
# emp:
insert into emp(name, age, gender, dep_id)
values('tank', 17, 'male', 1),
('jason', 70, 'male', 2),
('sean', 50, 'male', 2),
('egon', 88, 'male', 2),
('owen', 95, 'female', 3);
# 报错,
insert into emp(name, age, gender, dep_id) values('大饼', 100, 'others