MySQL多表之间的关系

多表之间的关系

如上图所示,实际业务数据库中的表之间都是有关系的,我们接下来主要要学习的就是如何分析表关系 及建立表关系。
1.分类表

create table category(
    cid varchar(32) primary key,
    cname varchar(100)
);

2.商品表

create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double
);

3.订单表

create table orders(
    oid varchar(32) primary key,
    totalprice double
);

4.订单项表

create table orderitem(
    oid varchar(50),
    pid varchar(50)
);

表与表之间的关系

表与表之间的关系,说的就是表与表之间数据的关系。

  • 一对一关系

常见实例:一夫一妻

  • 一对多关系

常见实例:会员和订单

  • 多对多关系(需要中间表实现)

常见实例:商品和订单

外键

如何表示表与表之间的关系呢?就是使用外键约束表示的。
要想理解外键,我们先去理解表的角色:主表和从表(需要建立关系才有了主从表的角色区分)

  • 主从表的理解

现在我们有两张表“分类表”和“商品表”。
目前从表的声明上来说,没有关系,但是我们有个需求:
商品应该有所属的分类,这个时候需要将分类表和商品表建立关系,如何建立?
按照以上需求分析:

主表是:商品表。主表中,应该有一个字段去关联从表,而这个关联字段就是外键。
从表是:分类表。从表中,应该有一个字段去关联主表,而这个关联字段就是主键。
  • 主键外键的理解

  • 如何操作外键

主表添加外键的格式:

alter table表名 add [constraint][约束名称] foreign key (主表外键字段) references从 表(从表主键)

主表删除外键的格式:

alter table表名 drop foreign key外键约束名称

使用外键目的:

保证数据完整性(数据保存在多张表中的时候)
在互联网项目中,一般情况下,不建议建立外键关系。

一对一关系(了解)

在实际工作中,一对一在开发中应用不多,因为一对一完全可以创建成一张表
案例:一个丈夫只能有一个妻子

  • 建表语句:
CREATE TABLE wife(
    id INT PRIMARY KEY ,
    wname VARCHAR(20),
    sex CHAR(1)
);
CREATE TABLE husband(
    id INT PRIMARY KEY ,
    hname VARCHAR(20),
    sex CHAR(1)
);
  • 一对一关系创建方式1之外键唯一:

添加外键列wid,指定该列的约束为唯一(不加唯一约束就是一对多关系)
 

ALTER TABLE husband ADD wid INT UNIQUE;
  • 添加外键约束
alter table husband add foreign key (wid) references wife(id);

一对多关系

案例:一个分类对应多个商品
总结:

有外键的就是多的一方。

注意事项:

一对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一。

一对多关系创建:

  • 添加外键列
  • 添加外键约束

案例:

  1. 在商品表中添加一条记录,该记录的cid在分类表中不存在
  2. 在分类表中,删除一条记录,这条记录在商品表中有外键关联

多对多关系

案例:同一个商品对应多个订单,一个订单对应多个商品

  • 注意事项:
需要中间表去完成多对多关系的创建
多对多关系其实就是两个一对多关系的组合
  • 多对多关系创建:
创建中间表,并在其中创建多对多关系中两张表的外键列
在中间表中添加外键约束
在中间表中添加联合主键约束
用户和角色
1个用户对多个角色
1个角色对多个用户
中间表用户角色表 uid rid

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值