1.一对多实现方式:
在多的一方建立外键关联一的一方主键
例:员工与部门
-- 表关系之一对多
-- 删除外键
alter table work_emp drop foreign key dep_id;
-- 删除表
DROP TABLE IF EXISTS work_dep;
DROP TABLE IF EXISTS work_emp;
-- 部门表
CREATE TABLE work_dep (
id int PRIMARY KEY auto_increment,
dep varchar(20),
address varchar(20)
);
-- 员工表
CREATE TABLE work_emp (
id int PRIMARY KEY auto_increment,
name VARCHAR(20),
age int,
dep_id int,
constraint fk_dep_emp foreign key(dep_id) references work_dep(id)
);
-- 外键名 fk_表1_表2
2. 多对多实现方式:
建立第三章中间表,中间表至少包含两个外键,分别关联双方的主键
例:订单与商品
-- 表关系之多对多
-- 删除表
DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;
DROP TABLE IF EXISTS tb_order_goods;
-- 订单表
CREATE TABLE tb_order (
id int PRIMARY KEY auto_increment,
payment DOUBLE(10,2) not NULL,
payment_type TINYINT,
status TINYINT
);
-- 商品表
CREATE TABLE tb_goods (
id int PRIMARY KEY auto_increment,
title VARCHAR(100) NOT NULL,
price DOUBLE(10, 2)
);
-- 订单商品中间表
CREATE TABLE tb_order_goods (
id INT PRIMARY KEY auto_increment,
order_id INT,
goods_id INT,
count INT
);
-- 建完表后添加外键
ALTER TABLE tb_order_goods ADD CONSTRAINT order_id FOREIGN KEY(order_id) REFERENCES tb_order(id);
ALTER TABLE tb_order_goods ADD CONSTRAINT goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);
3.一对一实现方式
在任意一方建立外键,并关联对方的主键,并设置外键唯一[UNIQUE]
例:人与身份证 一般用于表的拆分 用户表与用户详情表
-- 表关系之一对一 在关联字段处加 唯一[unique] 约束
-- 创建用户表
create table db_user (
id int PRIMARy KEY auto_increment,
name VARCHAR(50) not null
);
-- 短评论 一对一 一个评论只属于一个用户 在user_id 后加上 唯一[unique]
create table db_essay(
id int primary key auto_increment,
content varchar(100),
user_id int unique,
constraint fk_essay_user foreign key(user_id) references db_user(id)
);
4. 删除外键
alter table 表名 drop foreign key 外键名;