00:01
好了,接下来到了外间约束了,外间约束是咱们今天所有约束中的一个重点。一个重点。这个外键约束啊,看这概念啊,他说本表某列的取值完全取决于另外一张表的主见列。啥意思呢?咱来看一看经典的案例,用户和订单。模拟数据啊,模拟数据先。分割线。表示重视一下啊。创建用户表,我去我这UC已经干好多了。那就U48吧。接着往下往下搞是吧。呃,Table有。里边里边有啥列呢,等会儿再说,再来一个订单表。用户表,有了订单表,咱就order吧。为啥叫八呢?我想让他俩对应上好吧。好,这样。
01:01
那这两张表里边儿的数据,咱们应该怎么做,怎么搞呢?我想想啊。呃。用户是吧。就来个ID呗。来个名字得了呗,用内用户内幕。我擦。主见。不能为空。好吧,你。走,你。好,第二张表订单表,订单表呢,咱们也简单一点啊ID。Number。这个这个这个这个组件。然后呢,订单的话,来个订单详情吧,咱就叫。我二这个订单里边可能有订单详情是不是啊,我今天买了买了啥是吧,可能字很多啊,但是不能为空。一直行。
02:01
好,两张表创建完成了添加测试数据,Insert into user。Values。一号用户叫张三。李四。二号用户。二号用户OK吧,然后呢。插入订单数据,Insert into order values。1001。这个啥呢,订单编号啊,订单编号,然后呢。买了啥?买了个表。买了个表是吧。好,然后再来一个。零二号订单。买了。Four。买了是吧。好吧。好,现在咱来看一看啊,现在咱们来看一看,比如说我再来一条。
03:06
啊。爱的魔力。转圈圈是吧。转圈圈。就这个意思啊。现在呢,咱们主要是观察一下这两张表的数据,好吧。这两张表的数据。第一张表,用户表,第二张表订单表,张三李四,是不是比如说咱开了个京东商城,是不是有两个用户已经注册了。然后这两个用户呢,对我这个里边开始买了三个商品。但是看着现在这个数据上来看的话。买了风冷,到底是谁买的?是张三还是李四啊?转圈圈。张三还是李四买的?完全不知道吧?完全不知道。所以呢,咱们应该想办法,有这些数据和张三和李四是不是应该。
04:03
关联到一起啊。哎,关联到一起。咱们应该咋做呢?应该这么做,或者说你看大家都知道这么写啊,你看我写的啊,比如说买了个表。我是张三买的,我是不是可以写一个。张三的名称啊。哎,张三买的后边那个呢。你是买的后边这个呢。嗯,没有还张三啊。来看。那么张三是谁呀?是他呀,那他代表的是不是就是一号用户啊。所以呢,我在这里边是不是可以用一呀。对吧,而李四的话是不是二号用户啊,我这块是不是可以写个二啊。这样的话,这就这两条数据来说的话。能表述清楚这个事儿了吧?
05:00
张三买了个表对吧,李四买了个风冷是吧。OK。然后呢,这块又是张三转圈圈。对吧。好了,那么后边这个列一看哟,这个列其实是什么呀。就是用户的ID列吧。那能不能这样呢,我写一个六。我写了个六。好这样啊,先咱们先看这样啊。我把这两张表创建完了吗?完了是吧,来张三插进四插进。然后呢,这个现在我是不是对这张表多加了这么一个列啊,假设这个列啊,我起个名叫user ID。行吧,Number类型。这个。L的吧,创建了吗?这个有了是吧,删了哈。
06:03
重新创建的TABLE8。哎,留下吧,还得写一会儿。出事了啊。OK,然后呢,大家看啊,我现在开始添加。买了个表。没创建啊。再来。买了个表没问题,买了风了没问题,然后魔力转圈圈没问题是吧。好,突然间呢,又来了一个零四号订单。这个买啥呀。炒面。OK吧,哪号买的呢?666买的。哎,一直行。是不是插进去了。哎,数据没问题哈,那这样的话,咱来描述一下这个事儿哈。张三买了个表,李四买了,然后张三买了魔力转圈圈。然后666买了炒面。问题是。
07:00
谁是666啊?对吧,你不知道这个叫什么名吧。所以呢,大家来看。这个列就是后边的这个列,新加的也就是UID这个列,这个列的取值并不是你胡诌的。并不是你瞎搞的吧,应该哪来的?应该是什么应这个列的取值应该是另一张表的主键列,OK。应该把这个数据搞过来吧。再强再说一遍啊,你这个订单表的UID列,你不能胡说八道。不能胡说八道,这个列的取值你不能瞎写,这取值必须是这张表的。ID。必须是他。那这个过程就叫外界。什么是外键呢?就是这样,我这张表的这个列的取值完全取决于另一张表的主键列。
08:04
听听那个过程了吧。哎,再回头咱们来看一下我的PPT。这回这句话能看清了吧?本表某列的取值完全取决于另一张表的主见列。那么本表叫子表,另一张表叫主表,好,再来看一看啊。在刚才描述的这个过程中。这张表和这张表谁为主表,谁为子表,就是说我这张表的这个列的取值是不是完全取决于它呀,所以本表是不是称之为子表,这个表为主表是吧。有人说,哎呀,这个太不好记了,其实很好记,我告诉你一个,告诉你一个套路啊。这两张表,你能找着这两张表的关联列吧?是不是U4ID这个和这个ID列它俩进行一个关联是吧,它俩是有关系的是吧。OK,那你就看。这个列。
09:01
在这张表中是不是主见?是不是?是对吧,OK,主表。明白了吧?你再看这个UID这个列在这张表中是主键吗?不是因为这张表的主见列是不是有了?所以它UID这个列并不是主键,所以它是啥呢?就是子表。而另一张表就是主表。好,咱来看一下这个啊。啊,咱们有的是关联啊,来看这儿啊。Great。Great ID吧。再看student student这这呢。是不是也有ID啊?对吧,也就是说金蝶这个同学他属于一年级,那他就属于什么,是不是青铜阶段呀。OK吧,是不是它俩靠着ID关联的,那我现在的问题就来了。
10:01
Great表,Student表。靠great ID关联,那么这两张表谁是主表?有一个什么概念呢?就是说看这两张表的数据的时候,一看我的天啊,这太少了,而这个呢,这么多。就会有一个印象,说多的数据的这张表就是主要的表,其实不对。根本不需要看你数据多少列多少,就看这个列看好了啊。Student和great这两张表咱已经确定好了,是不是就是靠着great ID这个列进行关联了?OK吧,OK,那你就看great ID这个列。在student这张表里是主键列吗?咱来看columns啊。这张表的主见列是谁?是不是6NO啊?对吧?而在great这张表里边儿,Great ID是不是主见啊?是的,所以在great和student这两张表的关系中,Great表为主表。
11:07
Great表为主表OK。咱俩再换一个。这两张表。Result。成绩表就咱写查询应该知知道了是吧。成绩表。然后成绩表啊,和咱们的科目表靠的是哪个练习关联。是不是科目ID啊?对吧,是不是科目ID啊,哎,语文啊不这呢语文数学啥的是吧?好,那在result和科目这两张表中。谁为主标?你就看subject这个列哈,Subject ID这个列在result这张表中是主键吗?不是是吧,而subject ID这个列在subject这个表中,它为主键,所以确定一件事,它就是主表。好,分清主子主主从了吧。
12:02
好,分清了吧,再看PPT。OK,主表和子表应该分得清。这回呢,你再看一下咱这个代码。到底谁为主表?是不是有?哎,有,因为在这个列和这个列的关联关系中,它为主键,所以它为。知道清楚之后啊,咱就好办了。好了。但是现在啊,大家看我这个炒面刚才是不是添加进去了。他能让咱们往里添加吗?不行吧,因为我主表中根本没有666这个用户,所以我绝对不允许往里添加。如果你能添加进去,你是不是出轨了。哎,这鬼这是这个用户是谁呀。对吧,根本找不到这个人哈。所以咱们应该限制这样的插入。
13:01
限制这样的插入。OK吧,好,咱们怎么做呢,这么做。在这个ID和这个ID之间做一个关联,他俩做一个关联。怎么关联呢?这么写。看好了啊,在这块写一个单词叫引入。REFRE。NCE。不是不是不是。Re,诶,对了。感谢输入法是吧。对,和他搞上。引用是吧,Reference reference其实挺难背的,这个玩意我对我来说挺难背的,这个意义太多了是吧。把大家英文好的好背下来啊,那这个单词写在这儿行不行呢?记住了还不行,必须加个复数S。复数S啊,引用引用啥呢,这啥意思啊,就是说我这个列。我并不是自己往里添加的,我这个列的添加一定来自于。
14:05
U8表中的这个列。明白啥意思了吧。我这个列来自于。写上user。八表中的ID列。翻译过来。User ID。曲子来自于。USER8表。的ID列。OK吧,现在呢,我把这个job table8就order order8啊,再次删掉。再次删掉,然后再次重新创建。好吧,这个张三李四我没有改哈,好来。买表。买了。圈圈。再来炒面。干什么?是违反完整性约束啊。好,这个里边类型呢,它自己定义的,你甭管它了,看这未找到负向关键字。
15:06
哎,你想插666,我根本不知道666是谁,所以不让你往里插。OK吧,这个过程就叫外键约束,啥是外键啊?就这句话,读一遍就知道了。这个表的取,这个列的取值来自于另一张表的一个列。就叫外键约束。外键约束。在咱们整个操作系统不是操作系统啊,就是以后咱们开发什么什么系统啊,什么什么商城啦。这些软件中,外键约束无处不在。无处不在啊。所以这块一定要注意。好,这就是咱们的外界约束。外形数这个写法注意哈,这个单词强调过了啊,必须加复数S。
16:00
这样的话,咱们就把这个搞定了。
我来说两句