表关系及外键约束
# TODO:表关系
# 1、一对多(外键建立在多表上)
# 一方:主表或者1表 多方:从表或者N表
# 2、多对多 (外键字段建立在第三张表上)
# 3、一对一:这种表关系一般将两张表合为一张表或者随便选择一张表作为从表(多表)设置外键(为主表的主键字段)
一对多表设计
# TODO:一对多表设计:在多表(从表)上增加一个字段(外键字段)
# 外键字段下存储的数据全部是来自主表(1表)的主键值
多对多表设计
# TODO:多对多表设计:建立第三方中间表--》使之成为一对多的关系
# 由中间表承担两张表之间的联系,中间表有2个外键字段,分别来自两张表的主键
外键
外键的使用
1、外键字段(真正实现表和表之间关系)
2、外键约束(确保外键字段的值为主表中主键的值)
#外键约束
# 语法:
#TODO:1、建表的时候,设置外键约束
# create table 表名(
# id int auto_increment primary key,
# name varchar(20),
# 外键字段名 int,
# constraint 外键名称 foreign key(外键字段名) references 主表名(主表主键字段)
# )
# 2、修改表的时候设置外键字段
# alter table 表名 add constraint 外键约束名称 foreign key(外键字段) references 主表名(主键字段);
# 练习
# 一对多关系
# 部门表 (主表)
create table department (
id int primary key auto_increment, -- 主键字段
dep_name varchar(20),
dep_location varchar(20)
);
-- 测试数据
insert into department (dep_name, dep_location) values
('研发部', '广州'),
('销售部', '深圳');
# 员工表 (从表)
create table employee(
id int primary key auto_increment,
name varchar(20),
age int ,
dept_id int, -- 外键字段(和department表中的id字段有关联--》数据类型与主键字段的数据类型一致)
-- 添加外键约束
constraint FK_employee_dept_id FOREIGN KEY(dept_id) references department(id)
);
-- 测试数据
insert into employee (name, age,dept_id) values
('张三', 20, 1),
('李四', 21, 1),
('王五', 20, 1),
('老王', 20, 2),
('大王', 22, 2),
('小王', 18, 2);
-- 测试: 在主表中的主键字段下没有数据10(插入一个不符合外键约束的数据就会报错)
# insert into employee (name, age,dept_id) values ('测试',22,10);