【数据库】外键约束

外键约束

在本人之前的博文中,本人讲解了数据库中操作表的基本SQL语句,
那么,现在本人来讲解下多表查询的相关知识点。

首先,本人来讲解下ER图的相关知识点:

ER图:

请观看本人博文 —— 《【数据库】ER图》


一对多:

概念

在开发中,关系中的一方称之为主表 或者 一表
关系中的多方称之为多表或者从表


为了表示一对多的关系:
一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)
字段类型一般和主表主键的类型保持一致,
我们称这个字段为外键

添加外键格式

alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);

添加了外键约束之后有如下特点:

  1. 主表中不能删除从表中已引用的数据
  2. 从表中不能添加主表中不存在的数据

那么,现在本人来通过一个例子展示下“一对多”的关系:
例1 —— 用户和订单
本人现在来分析下这个例题:
分析

在用户与订单的关系中,由于一个用户拥有多个订单,所以,用户表是一表,订单表是多表

那么,现在本人来展示下用户表:

create  table user(
    id int primary key auto_increment,
    username varchar(20)
);

接下来是订单表:

create  table orders(
    id int primary key auto_increment,
    totalprice double,
    user_id int   
);

接下来,我们给订单表设置外键:

alter table orders add foreign key(user_id) references user(id);

若是我们想删除主表中的数据,则有两种方法

  • 方式1: 级联删除(ON DELETE CASCADE)
    即:在添加外键约束的语句最后面加上如下修饰符:
    ON DELETE CASCADE
ALTER TABLE orders ADD FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE; 

那么,现在本人来展示下生成的外键约束关系:


一对一外键约束 展示

之后你就可以删除主表中的数据
当然也可以将 级联删除级联更新 都加上:

ALTER TABLE orders ADD FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE;
  • 方式2:
    先把带有外键多表数据删除,再删除一表中的数据

多对多:

对于多对多现象,我们一般是这么处理的:
处理方式

引入一张中间表,存放两张表的主键,
一般会将这两个字段设置为联合主键,
这样就可以将多对多的关系拆分
两个一对多关系
为了保证数据有效性完整性
需要在中间表上添加两个外键约束即可

那么,现在本人来通过一个例子展示下“一对多”的关系:
例1 —— 商品和订单
本人现在来分析下这个例题:
分析

一种商品可以存在多个订单中,一个订单也包含多种商品,所以商品表和订单表都是多表

那么,我们首先来创建商品表:

create table product(
    id int primary key auto_increment,
    name varchar(20),
    price double
);

现在,本人再来创建订单表:

create  table orders(
    id int primary key auto_increment,
    totalprice double,
    user_id int   
);

现在,我们根据前两张表,来制作中间表:

create table orderitem(
    oid int,
    pid int
);

添加外键约束:

alter table orderitem add foreign key(oid) references orders(id);
alter table orderitem add foreign key(pid) references product(id);

那么,本人来展示下生成的外键约束:


多对多外键约束 展示

那么,本篇博文的知识点在这里就讲解完毕了。
(请观看本人博文 —— 《【数据库】约束》)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,...
    孤鸣雁阅读 5,305评论 0 2
  • 目录 1、主键、外键、索引定义 2、为什么定义主键、外键 3、主键和外键的关系 4、数据库中主键和外键的设计原则 ...
    greensure阅读 5,791评论 1 4
  • 数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格...
    假正经乄阅读 6,083评论 0 2
  • 1、约束概述 约束的目的是为了保证数据的完整性与一致性。 按照约束的范围划分:列级约束:只对一个数据列建立约束。既...
    黒猫阅读 4,603评论 3 5
  • 假期结束了,今天是开学第一天。早上送儿子上学路上,看见了一起交通事故,两个小轿车因为超车撞到一起,车上人员受了伤,...
    本仙老四阅读 891评论 0 3

友情链接更多精彩内容