Day 05 - 了解FOREIGN KEY 外键限制!

上一篇在创造新的资料库时,有提到PRIMARY KEY也就是主键限制!那麽此篇来继续介绍FOREIGN KEY 外键限制。因为外键限制在关联式资料库非常的重要。主要的功用是指向其他表的主键(Primary Key)的栏位,用於确定两张表的关联性及资料完整性,以避免部分资料匹配不上的问题。

特别提醒:

  • 如果想要使用外键,储存引擎必须是 InnoDB
  • 外键只能指向被设定为主键的栏位
  • 外键与指向的主键资料型别必须相同

接下来直接用经典的客户与订单的关系来了解吧!

实例说明

首先我们先看到这张客户资料表纪录了4笔顾客资料。顾客姓名则是Primary Key(虽然不应该用姓名拿来当pk,可能会有同名同姓的问题,但将就一下这样比较好解释xD)

客户资料表

顾客姓名(Primary Key) 住址 电话
李大华 桃园 09111211
李大华 高雄 09232323
林小明 台北 09256627
林小美 新北 09741852

然後我们看到订单资料表上也有顾客姓名,因为我们想知道这笔订单会是谁订的。只要确保外键限制有连接好,[订单资料表的顾客姓名]会等於[客户资料表的顾客姓名],这样不仅能方便查询更可以防止订单编号05的状况出现。

来看看订单编号05的顾客姓名并没有出现在客户资料表,所以如果我们有连接好外键限制,这笔资料会加不上去,以防止幽灵订单的出现。

订单资料表

订单编号(Primary Key) 顾客姓名(FOREIGN KEY) 商品名称 价格
01 李大华 汉堡 70
02 李大华 薯条 50
03 林小明 可乐 40
04 林小美 拉面 230
05 罗小呆 奶茶 87

今天就到这里下篇见了~中秋连假快乐


<<:  【在 iOS 开发路上的大小事-Day07】除了用 WKWebView 以外,还可以如何在 App 中显示 PDF 档案呢?

>>:  Day 5 TDD 测试驱动开发

Chapter1-DJ最爱的音频动感图像(IV)让音乐动起来!开篇基础设定和动画框架

话不多说先上图 从左到右依序执行,最後该函式会再呼叫自己一次,图中淡化的区块是下个章节的主题 然後把...

Day 06:Angular 的主要特色与优点简介

上一篇看完了 AngularJS 与 Angular 的差异後,我们今天要集中火力来看看 Angul...

【Day 09】配接器 设计模式(Python)

前言 上一篇我们用 Python 简单的几行程序,就可以实践工厂方法设计模式,本篇继续讨论另一个设计...

Golang-Slice 使用copy()与宣告的不同

这篇算是笔记 看到有人发问slice有关的问题 有人回答用copy()进行复制slice,我就想跟用...

为什麽我的流程图都让工程师很头痛?

在这篇开始之前想到一个小故事... 业务工程师: 我把流程都给你了,你们应该可以很快做完吧? 工程师...