00:00
继续啦,咱们继续看,还有在约束当中啊,还有一个最后一个约束啊,就是外界约束。啊,外界约束,那首先第一个就是关于外界约束的相关什么呀,术语啊,这个呢,我们得说一下啊,外键字段,外键约束外键值。外键值,外界约束,外键字段,外键值还是这几个概念,各位外键约束是谁啊?Foreign t foreign啊。Foreigner是什么意思啊,外国人啊,Foreign是就是外外的意思是吧,外外外国人的外界啊。约束添加有外键约束的字段对吧。
01:05
就是外键字段中的什么,每一个值啊,就是外键值那。什么是外界约束有什么用?这是大家主要要学的,对吧,就是外界约束它是个什么东西,我们可以给大家举一个案例啊,举一个背景,我们可以来个业务背景。请设计数据库表用来维护。学生和班级的信息。怎么做?我们可以先提一个,有一个业务背景啊,就是请设计数据库表,用来维护学生和班级的信息。学生班级的信息给你维护起来。
02:03
我们可以采用第一种方案啊,我们一种一种说第一种方案就是一张表呗,存储所有数据是不是,哎,你比如说学生有什么呀,编号,学生有编号啊,学生有名字,学生有班级编号,有班级什么名字。对吧,哎,比如说我这里呢,就这样写的一号学生张三对吧,那可能就是比如说这个这个这个这个做这张表得有主见吧,有主见是不是,然后呢,再往下呢,班级编号的话,就比如说这个这个是1110啊或者1100或者101吧,然后这个是这这么写的啊叫北京什么呀,大兴北京。大兴区。亦庄经济技术开发区。
03:02
然后。北京大学经济技术开发区一中、二中、高三、一。再拿过来,那信息可能就是这样啊,345啊张三12345。啊,那这个是10222,那这块呢,是二班二班二班妥了,这种方案行不行,有没有缺点,哎,太好了,俩字啊,冗余。对吧,大家看这个数据是不是大量的重复啊,哎,重复冗余啊,第二种方案就是第一种方案说了半天就是这种方案不不推荐啊不推荐啊,有种预第二种方案是两张表啊,对吧?哎,什么表,班级表和学生表。
04:18
那我们就把这个表呢,我们设计一下,比如说这是一个什么呀?Class,这class总感觉跟Java中的class有点冲啊,这是什么?班级表是不是好student这学生表呗,班级表这块的话,有班级的一个编号吧。班级编号呗,班级的一个什么名字对吧?哎,班级名字班级编号是101和102 101是他。102呢,是他。能看明白吗?这张表是班级表,学生表的话,那就是学生有学生编号,学生有学生的什么名字,对吧?然后接下来呢,我们把这个表呢,哎,一号学生,二号三号四号学生,五号学生就给他拿过来,一号学生,我们是张三一,然后呢,把这个拿过来啊好大家看这样的话是不是就相当于我们这张。
05:22
表,班级表和学生表的信息是不是就有了,但是呢,人家上边啊能看出来这个张三一啊,他属于这个班的,但下边看不出来张三一是属于哪个班的,看不出来对吧?注意听了啊,两句话就讲,讲完了两句话就讲完了,外线就关键在这个位置上啊,咱咱咱咱不能到,关键就你就没听着是吧,外界有很多成员就在大学里边学外界学词的多的是啊,不知道外界是啥。对,你就搞懵了,一个外线干蒙之后,天天后面都是表关联,表关联表关联全是外建,全是外建,你一一看见外建就头疼,为啥没弄懂?
06:02
就不就是这点事吗?主见很好学外界这个东西你还是得考虑想一下这是什么东西,这是这张表的主见,对吧,这个是不是这张表的主见,好各位,那现在呢,我们现在没有关系,在这个位置上,我们是不是需要加一个字段,我们叫c number。这个我们就可以作为加添加什么该字段添加外键约束。啊,FK。如果你这个字段不加外界约束,将来在这个位置你就可以随便写。听懂了吗?如果你加了这个外键约束,外键约束加上去表示可以指定你这个外键字段引用哪个字段,假如说你指定这个字段引用了这个字段,那么将来这个字段当中出现的这个值必须是这个字段下的值。
07:16
你要写别的。报错,这就是外界的作用。我再说一下啊,如果这个字段上不加外键约束。就表示你这个字段上可以随便写,你愿意写什么写。如果加上外键约束,就表示说你这个字段里边值不能随便写了,你这个外键里边的值必须来自于某一个字段。明白101101102102102没事。
08:02
这就是我所说的第二种方案。我们可以写一下啊,将以上表的建表语句。写出来了。怎么写,各位?注意,如果我学生表以其中有一个字段去引用你这张表的某个字段,我们这张表叫附表,称这张表叫子表,父子关系。字引。这个字段啊,叫class的class number字段引用谁啊?引用T下降class表中的什什么c number字段,此时t student表表叫做子表。
09:14
注意啊,子表t class表叫做附表。好,需要注意的时候说注意的什么呢?在删表的时候,我们先删哪个。先看资料。能不能先删这张表,你这张表的这个字段还在用着你这张表的这个字段。登山和登山走。先山子,再山父。插入数据的时候,或者是创建表的时候,应该先创建哪一张表附表,再创建子表。
10:02
听懂了吗?这个你不用记。你理解呀,我用着你呢,你不能随便删吧。要删也是先删我再删,你就这意思吗?是不是创的时候,创建的时候那必须得先有父亲后有子。因为我这块呢,用着这块的东西,你不得先把这张表创建出来吗?插入数据也得先插入,谁也得先往附表里边插入数据子表才能插入,因为我这个字段用着这个字段听懂了吗?这块你得搞明白啊,有父子表的,你不能随便来啊,不能随便来来删除数据的时候先删除什么,先删除表,再删除附表,添加数据的时候先添加附表,再添加子表。
11:09
创建表的时候。啊,先创建什么呀,附表,再创建什么子表,删除表的时候先删除子表,再删除父表。有操作顺序,顺序要求父子表有这么一个概念在里边。那接下来我就把这两张表创建一下,我把数据给他维护进去行吗?怎么做?大家一起来看看这个circle该怎么写drop table if吧,哪张表存在,给它删掉。
12:11
先写哪个?事实个七然好觉。先删子,再删父吧。是不删完了,删完创先创谁先创负,这块有什么呢?有C和c primary key。不自增啊c name。也可以在这写啊,Primary。
13:03
再创子吧,谁student,这是子么?子的话有s name和class number来注看s number s name和class number。S number是int s name是蛙叉。Class number。是不是他?注意啊,Foreign。Key class number reference this。T class,这就是外界约束。这么加。
14:02
固定写法哪能变?他,他和他。就是说我这张表的外键是谁,他。我这个外键字段引用这个单词的意思是什么意思引用。引用你这张表是不是这张表中的哪个字段看。你得会写各位啊,你不能说你光用这个啊,你光用这个工具你会。注意。你呀,得会写这个代码。先删子,再删父,先创富,再创子。子表中有一个字段叫class number,在引用你附表当中的c number这个字段,这个字段是主键。我这个字段是外键,外键引用的是它就相当于你这个字段里面东西不能随便写了,它是一个FK引用它。
15:06
好了,那这块呢,我们插入数据,各位先插父还是插子。附表是吧?Insert into哪张表啊?T什么class这张表,然后values直接啊,比如这个班级编号是101。是吧?101班级是102,我们是不是再给一个。班级啊,102。这是一个班级,这是一个班级下边有个。子表吧,T什么values?那这块呢,有12345对吧,好,那么接下来这写一张三一。对不对。
16:18
还有一张表叫。是吧,哎,把这个我们拿过来。可以吧,哎,放到哪了。这儿行不行?能看懂吗?点右键。关了它。打开那个窗口怎么办啊,扫扫拖过来。好,大家看这个数据是不是就有了,这是一个。
17:02
班级吗?这是学生啊,那你现在尝试插入数据的时候,插入103,你试试七李四把103,这个103是不是在上面根本就不存在,所以拿过来走一个报错了,大家看这个错误信息能不能看懂。你看不懂,怎么能看不懂呢?以你的英语水平想不到。错误编号1452,不能够艾或者是UPDATE1个子,他说孩子呀,这叫孩子吧,一个子记录吧,不能添加或者是更新一个子记录。这个孩子加不进去是吧,这个七是个孩子,明白吧,因为七是这个学生表,往学生表里边加的是不是子记录,往班级表里边加的是什么负记录,他说子记录加不进去,原因是一个foreign k,一个外键约束吧,这个英语单词之前我写过叫的约束。
18:08
有一个外界约束失败对不对啊,是是是谁约束谁,这谁引用谁,他说。他说北京动力节点下有一个T下student IB,这是一个约束的名字吧,啊然后呢,外键是引用的是t class什么c number,他跟你说明了,说明你这个你这个class number正在用人家c number的东西,你这个class number不能有出现103 103不是不是那个c number中的数据。听懂了吧?所以说外界约束重要吗?很重要,外界约束,约束的字段,这个字段当中的数据不能随便写得来自于某一张表当中的某一个字段。怎么个了这句话能记住foreign。
19:03
你不加这个约束,这个字段的值就能随便写了啊,你这个字段上的值如果随便写,你是不是就不符合这个数据的完整性了。咱不说约束有一个什么作用,什么保证数据的这个有效性完整性啊,合法性对不对,哎,所以说这块呢,你得加一个约束,没有约束表中的数据没有办法得到保障。好,刚才我无意之间又给大家演示了SQ脚本脚本,各位啊,我在这里又演示了脚本,就是SQL语句,这个东西呢,可以写到一个SQ脚本当中,想执行它source一下就执行了。懂了吧,啊,现在应该是懂了啊,最初你可能懵懵的是吧,不知道他是干啥的,但是现在我告诉你,以后开发项目经理就会给你这么一个搜Q脚本,然后你执行source命令,把搜脚本一执行,底层数据库的数据表全都有了。我们以前开发一般最少的表七八十张啊。
20:02
就是一个系统最少的小系统七八十张,七八十张啊,如果就是说好几年好几年开发的系统,几百张表很常见啊,很常见,那这个表呢,会使用什么呀,这个叫做这个power抵在哪。工具啊,进行设计party工具,到时候咱们可以演示一下。700多。怎么了,加了呀。哦,这个没加,这个得加上啊,这个得加这个,这个不加不合法啊,这个没加primary呀。行吧。什么?算。
21:01
不,咱们就是举一个例子,就是为了讲外建,为了讲外建这个东西啊,就是举这么一个例子,在实际开发中,我说了这个业务主业主线,这个最好别用,对这个同学提的挺好。啊,就是这个什么学号啊,还有班级编号啊,这个其实并不是有,并不是完全的自然主见,对不对,他跟业务是不是有点挂钩啊,有点挂钩,确实是啊,说的非常有道理啊,有道理对,这块咱们最主要是讲外建,各位你把这句话记住就行了。主主要是这个语法啊,Foreign key是谁引用谁谁谁啊,然后呢,再往下呢,我们要说的是什么呢?就是说还有还有一个知识点啊,就是外界能不能没闹。外电值可以纳。
22:02
就这个很简单,我们测一下就行。对吧,测一下,那这条语句拿过来放到这,这个删了呗,前面这块得写谁student这块里有s number和s name吧。是不是走一个什么student。大家看,外键是可以为nu的。挡不住这个啊,外建可以为难,好,下一个知识点还是外建,各位,这个约束还没讲完,我想问你个问题,我问,你来答,你来思考,你来答啊,我外建。字段引用你另外一张表的某一个字段的时候,这个字段必须是主键吗?
23:12
就是外键字段引用其他表的某个字段的时候,被引用的字段必须是主键吗?就我这个字段,我在引用的时候,引用你必须得是个主键,主键吗?不是啊,别的字段也行,但别的字段必须有唯一性。知道为什么必须有唯一性吗?如果你没有唯一性,就意味着您这个字段可以重复。
24:03
对吧,如果完全重复的两条记录下边在引用这条记录,这条记录在引用您的时候,这个如果引用的是相同的,假如说是101 101,我这个101到底是用的您这个101还是这个101,是不是说不清了。听懂了吗?所以说我这个外键字段引用您这张表的字段的时候,您这个字段不一定是主见,但起码具有唯一性,只要有唯一性就行。这是最低要求啊,但一般情况下都是引用什么主键,一般情况都是这个字段引用主键。听清楚,这个不是外键啊,这是主键,这个添加外键约束的字段才叫外键。这个K叫什么?外键约束,其中这个添加有外键约束的字段叫外键字段,其每一个值外键值,外键外值,外键值用的是你其他一张表中某一个字段的值,这个字段至少具有唯一性,不一定是主键,我先说一下这个事儿啊,来这块你下去之后测一下啊,测试一下,我在这里就不耐测了啊,至少具有唯一性啊,不测了。
25:20
注意,被引用的字段不一定是外键啊,不一定是主键,但至少具有unique约束。但至少具有unit约束。微信语数啊,要不然你要重复了,那我这引用的谁就说不清了呀,这个东西是吧,这数据就不对了啊。好了,到此为止,约束讲完了,好,再回顾一下,约束有外界约束、逐渐约束、非空约束、唯一性约束、非空约束。约束的字段不能。
26:00
不能没空。唯一性约束,约束的字段不能重复,但可以为空,是吧?主见约束是说你这张表必须有的。对吧,哎,主见值代表你这行记录的唯一标识。外界约束说白了,我这个字段上的数据不能随便写,我这个字段上的数据不能随便写,我这个字段上的数据必须来自于您某一张表当中的某字段的值啊,被引用的字段必须具有唯一性啊,记住这就可以了,这样的话,我们这个约束就说到这儿啊。
我来说两句