sql语句之多表关系 一对多 多对多

多表的关系介绍

  • 在实际的开发过程中,项目一定是有多张表的,且这些表之间是都有关系的
  • 表与表之间的关系分类:一对一 一对多 多对多
    一对一:A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一张表
    在这里插入图片描述
    一对多:A表的一行对应B表的多行,反之不成立
    在这里插入图片描述
    多对多:A表的一行对应B表的多行,B表的一行对应A表的多行
    在这里插入图片描述

多表的关系-一对多关系

  • 初始化数据
  • 一对多的创建流程
    在这里插入图片描述
    》创建主表(分类表)
    》创建从表(商品表)
    》给主表和从表之间添加外键约束
    alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
    》给主表添加数据(随便添加)
    》给从表添加数据(添加数据是必须依赖主表)
    (3)一对多特点
    添加数据: 主表:随意添加,从表:受主表限制
    删除数据: 主表:如果某一行的数据受到从表的依赖,则不能删除, 从表:可以随意删除
#创建主表(分类表)
CREATE TABLE category(
	cid INT PRIMARY KEY AUTO_INCREMENT,
	cname VARCHAR(20)
);
#创建从表(产品表)
CREATE TABLE product(
	pid INT PRIMARY KEY AUTO_INCREMENT,
	pname VARCHAR(20),
	price DOUBLE,
	cid INT -- 外键 表示属于哪个分类
);
》给主表和从表之间添加外键约束 
`alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);`
alter table product add  foreign key (cid) references category(cid)
》给主表添加数据
insert into category value(null,'电子')
insert into category value(null,'服装')
》给从表添加数据(添加数据是必须依赖主表)
insert into product value(null,'联想',2000,1)
insert into product value(null,'华为',4000,1)	
insert into product value(null,'真维斯',100,2)

多表的关系-多对多关系

多对多创建流程
》》创建订单表(主表) order
》》创建中间表(从表) 保存交叉线
》》给中间表建立外键约束(2次)
》》给订单表添加数据(随意)
》》给中间表添加数据(受限)

#创建从表(产品表)
CREATE TABLE product(
	pid INT PRIMARY KEY AUTO_INCREMENT,
	pname VARCHAR(20),
	price DOUBLE,
	cid INT -- 外键 表示属于哪个分类
);
CREATE TABLE orders(
	oid INT PRIMARY KEY AUTO_INCREMENT,
	money DOUBLE
);
CREATE TABLE product(
	pid INT PRIMARY KEY AUTO_INCREMENT,
	pname VARCHAR(20),
	price DOUBLE,
	cid INT -- 外键 表示属于哪个分类
)
INSERT INTO product VALUE(NULL,'联想',2000,1)
INSERT INTO product VALUE(NULL,'华为',4000,1)	
INSERT INTO product VALUE(NULL,'真维斯',100,2)	
CREATE TABLE orders_product(
	oid INT , -- 必须存在 外键
	pid INT  -- 必须存在 外键
);
#给中间表建立外键约束(2次)
ALTER TABLE orders_product ADD FOREIGN KEY(oid) REFERENCES orders(oid);
ALTER TABLE orders_product ADD FOREIGN KEY(pid) REFERENCES product(pid);

在这里插入图片描述

多对多(演员与角色的关系)

创建表:多对多的关系(演员表与角色表)
》》 创建演员表(左侧主表)
》》 创建角色表(右侧主表)
》》创建中间表(从表)
》》建立外键约束(2次)
》》给演员表添加数据
》》给角色表添加数据
》》给中间表添加数据

# 创建演员表(左侧主表)
CREATE TABLE users(
	uid INT PRIMARY KEY AUTO_INCREMENT,
	uname VARCHAR(20)
)
# 创建角色表(右侧主表)
CREATE TABLE role(
	rid INT PRIMARY KEY AUTO_INCREMENT,
	rname VARCHAR(20)
)
# 创建中间表(从表)
CREATE TABLE users_role(
	rid INT , -- 数据必须在role存在
	uid INT   -- 数据必须在users存在
)
#建立外键约束两次
ALTER TABLE users_role ADD FOREIGN KEY(rid) REFERENCES role(rid);
ALTER TABLE users_role ADD FOREIGN KEY(uid) REFERENCES users(uid);

在这里插入图片描述

总结

  • 要分析表与表之间的关系是属于一对多还是多对多

猜你喜欢

转载自blog.csdn.net/xinxin_____/article/details/108760670
今日推荐