00:01
好,那接着的话呢,我们来学习第13章叫做约束,那约束呢,也是我们讲这个表的话呢,是最后一章了,哎,下边这块呢,我们就要讲这个除了表之外的其他的一些数据库对象了,比如说像视图啊,存储过程,存储函数啊,触发器啊,哎,这呢都是基于表之外的一些其他的数据库对象。那么最后一章了,那有同学可能会想说,老师啊,这个你讲到这个表的最后一章了,是不是说这块呢,是一些了解性的内容啊,就是把这个剩下我们没有讲的边角料的话呢,我们来稍微谈一谈,是这个意思吗?那那注意啊,这个还不真不是啊,这个约束这些章节呢,还算是比较重要的。那约束,那我们前面呢,是不是讲过创建表了是吧,咱们在创建表的时候呢,就可以给这个表中的一些字段呢,去加上一些约束。而且呢,在实际生产当中啊,我们说在造表的时候是一定会加约束的啊,所以说这个约束这个章节呢,咱们还必须要讲,那在我们给这个表的字段加上约束以后呢,咱们后续做这个增删改操作的时候呢,他就得考虑上人家这个约束,那要不呢,他就不让你增,不让你删,不让你改。
01:05
啊,就是这么个道理,所以说呢,这个约束这一章节呢,还算是比较重要的,而且呢,这个约束里边啊,那有一些呢,比如说特别的一些约束,像我们讲的这个主见约束。咱们讲到下篇的时候呢,还会讲逐渐约束呢,会自动的添加一个主键的索引,那索引的话呢,是我们下篇讲优化当中的一个非常重要的内容,所以说呢,跟我们下篇的内容啊,也是息息相关的。啊,也是息息相关的,OK,好,那这块呢,我们就来看一看,说什么叫这个约束。啊,约束呢,用这个英文来描述呢,叫做cons,就这个单词那挺长的啊,不太好记,那这呢也是咱们MYS当中的一个关键字,那咱们下边讲解的时候呢,就会用到这样一个关键字,那你可以提前呢先记一下啊constraint好,那么约束那一提到这个词的话呢,是不是,诶就是说你会想说怎么叫一种约束呢?啊实际上呢,我们说这个词呢,还是比较形象的。啊,像咱们说人啊,在生活当中,实际上咱们是不是就存在着一些约束啊,啊,比如我们说有道德上的约束,有法律上的约束啊,法律上的约束就不用多说了,大家哎,都应该知道杀人放火这些事儿,那肯定是法律上的约束了啊,那你这个道德上的约束呢?
02:16
举个例子呢啊,比如说你现在已经有这个女朋友了啊,有女朋友了,然后呢,你现在呢,是不是就不能够再去沾花惹草啊,跟其他的女生这个关系过于亲密就不太合适了,对吧?哎,你要受到是不是道德上的一个谴责呀?啊这呢就是我们属于叫道德上的一个约束啊,那么我们放在这个表这块的话呢,说这个怎么叫约束呢。哎,我们可以这样去理解,首先啊,咱们说这个约束,咱们这一章讲的大家咱们呢,可以理解成了叫狭义上的一个约束。啊,就是具体来讲叫什么约束,什么约束,什么约束叫狭义上的,那么从这个广义上来讲的话呢,实际上我们前边呢,也算是接触过这种约束或者叫限制的什么意思啊,你比如说我们有一个字段啊,比如叫这个ID吧,咱们把它呢定义成是一个int类型的,那我说呀,当你给这个ID呢,去赋值的时候呢,咱们说就不能够赋一个ABC。
03:09
因为呢,人家需要的是一个int类型,你这个ABC呢,是一个字符串,而且还不能也是转换成int的,它就报错了。啊,这呢,其实就相当于是一种限制,对于数据类型的一个限制。对吧,哎,没有问题,好,那比如说我们现在呢,再去声明一个字段,比如叫name吧,咱们给它定义成了叫whata。那叫我差,比如我这块呢,我写一个十,那就意味着呢,我们再去给这个字段呢,赋值的时候呢,你这个字段长度呢,是不是就不能超过十啊,那你要超过十呢,它就报错了,那相当于人家限制了一下你这个字符的一个个数吧。对吧,呃,这个呢,其实我们广义上呢,也可以理解成是一种限制,或者说呢,叫一种约束了,嗯,但是不是咱们这一章要讲的约束,咱们这一章约束呢,就是真正意义上的说什么什么什么具体的约束了啊,就是狭义上的,好,那我们来看一看。哎,那首先呢,这里边抛出了一个问题,说为什么需要约束。
04:02
啊,为啥需要约束啊,这里边儿提到一个非常重要的词,叫做数据完整性。诶,数据完整性这个词的话呢,咱们到下篇当中也会去提到这样一个概念,它呢主要指叫数据的一个精确性啊和一个可靠性,那怎么去体验这个所谓的精确性和可靠性呢?这里边写一句话,大家了解了解一下,说呢,它是防止数据库中存在不符合语音规定的呃数据,或者防止呢,因错误信息的输入输出造成无效的这个操作或者错误信息呢而提出来的。啊,这块大家可能现在一看呢,还有点抽象,哎,等咱们讲完这一章之后呢,你回过来再看这句话呢,哎,很清楚啊,就这么回事儿是吧,那具体的话呢,我们如何理解叫数据完整性呢?哎,这里边儿呢,我通过几个具体的这个点来去体现,比如说实体完整性与完整性,应用完整性和用户自定义的完整性,诶怎么来看呢?比如说。啊,大家看第一个呢,我们叫实体的一个完整性。啊,什么意思呢?比如说我们在同一个表当中,我们说呀,不能够存在两条完全相同,无法区分的记录。
05:05
啊,你想想是这么回事吧。啊,两条完全相同的,那你想我们要是两条真的完全一样,你有办法把这两条区分开吗?比如说我想给其中的一条,其中呢也做一个这个修改的操作,那有可能区分出来吗?哎,是区分不了的,你像你写where的话呢,是怎么写也都是把它俩就合在一起的,是吧?呃,像这两条完全一样的记录呢,我们是不允许存在的,咱们可以通过呢向主见约束。啊,去做这样的一个明确的区分啊,明确的区分好,那么第二个呢,叫做域的一个完整性啊,比如说呢,我们去限制某一个字段啊,域就是字段嘛,他的年龄的范围呢,是零到120,性别呢是从男女当中去选啊有点类似于枚举是吧,这就属于叫育的一个完整性。还有呢,叫做这个引用的一个完整性,那引用的完整性什么意思呢?比如说员工所在的部门。啊,这个必须呢,在这个部门表当中,我们得能够找到这个部门,像咱们前面讲查询的时候呢,咱们是不是老用这个employees员工和这个departments这个部门表是吧?诶老用这两张表,比如说我们有个员工呢,是实号部门的,咱们说的是不是一定能够在部门表里边找到这个部门啊,你看这个部门是干什么的是吧,叫什么名字。
06:16
啊,那如果现在有个员工呢,是100号部门的,那如果呢,我们去这个部门表里边去找,发现根本不存在100号部门,这是不是有点扯了,那你说这员工你让他。在哪呢?有没有立锥之地呢?没有是吧,哎这个是不能出现的,但是呢,如果我们要是没有加哎这样的,呃,引用完整性对应的约束的话呢,那你这块呢,按正常来讲就随便填了,那我们就可以呢,去设置什么呀?哎,咱们下边呢,会涉及到叫做一个外建的约束。加上外界因素以后呢,我们就可以做这样的一个限制啊,保证着引用的一个完整性。还有我们叫用户自定义的一个完整性,比如说用户名得唯一啊,用户名得唯一这个大家应该都见过,像我们呢,去经常在一些APP当中,或者一些网站当中注册的时候呢,你把这个名写完之后呢,诶把光标往下边移啊,一失去焦点上面这块就提示你说你这个用户名呢,已经有人注册了。
07:08
啊,这其实发了一个异步的消息对吧,那这个时候呢,就是你在往数据库签的时候,主要是因为咱们,呃用户名这块呢,大家都得是不一样的啊,那他其实你说已经有人注册了,是因为我从这表里边已经查出来记录了,你要再用这个的话呢,这不就导致他俩就一样了吗。那就不行,人家要要求是唯一的是吧,好再者呢标比如说呢,我们这个密码呢,是不能为空的啊,就是你这个字段呢,是一定要把这个呃数据呢得填上的啊,不能是有空值,这呢也是一些要求,那我们对应的就有这个唯一性约束啊,还有这叫非空的约束。啊,还有呢,比如说本部门经理的工资呢,不得高于本部门职工的平均工资的五倍。啊,这个呢,都属于用户自定义的这样的一个限制。好,那整体上来讲呢,大家对这个叫数据完整性呢,还有一个理解,也就是说啊,咱们希望呢,有这样的一些实际在添加数据的时候呢,有这样的一些限制,对吧,那么这些限制我们怎么去体现呢?那我们就通过下边这个约束呢去体现。
08:08
像我刚才讲的这些呢,我觉得大家应该都能够去理解啊,哎,确实呢,是不是我们在一些场景下呢,会有这样的一些限制了,是吧,那怎么去体验,哎,就是通过我们这个约束,第二例呢,就是这些约束呢,是不是就能够保证这个数据的一个完整性啊。哎,这个大家你得会去答这样一个问题。啊,说什么叫数据完整性啊,哎,那我们约束呢,怎么去体现这个数据完整性啊,那是不是这块都列出来了,以及呢,我们这里边提到这一点呢,对应的你看约束是哪一个,我们在下边都会展开讲啊,没有问题。好,那这个事呢,说清楚之后呢,咱们下边呢,哎,就来说一说什么叫约束啊,这里也写了,说约束呢,是表级的一个强制规定啊,包括下边有约束的一个具体的分类是吧?好,那这块呢,咱们就回归到这个笔记这个层面,然后在笔记当中呢,咱们一起来做一个讲解啊,一边写呢,大家一边记,OK。这张还是在咱们这个8.0当中啊,CTRLV第13章啊约束好,然后呢,CTRLS我们首先呢,保存一下啊。
09:07
找到咱们这个桌面,哎,我们这个基础篇啊,咱们的这个代码是吧,好在这个位置啊,第12章第13章约束。好,我们这块呢,来讲这个约束啊呃,首先呢,咱们来讲这个第一个小的问题。啊,第一个小问题啊,那我们刚才呢,提到一些,咱们就称为呢,叫做基础知识吧。那基础知识首先一个1.1,哎,我们提到说为什么啊需要这个。啊,需要这个约束,那如果用一句话来简单概括的话呢,就是我们为了保证是不是数据的一个完整性啊,那我们提到了叫实体的完整性,域的完整性啊,引用的完整性,还有用户自定义的完整性,那我们提到有四个是吧?哎,具体我这块就不在这就写了啊好,第二个啊,我们说什么叫。哎,什么叫约束呢?
10:02
什么叫约束啊,哎,我这块呢,就用咱们自己啊,通俗易懂的语言呢,来去解释,什么叫约束呢?咱们说这个时候,咱们现在讲的约束是狭义上的啊,就是对表中字段的一个强制的限制作用。啊,一个强制的限制,或者我们把强制去了也行啊,就是对表中字段的一个限制。比如说呢,要求你这个字段呢,它得是非空的啊,要求你是唯一的啊,要求你是个主键啊等等,这就是它的一个限制,诶通过概念呢,大家也能看到,是不是专门是作用在这个字段上的呀。哎,这个没问题,好,这是我们说的这个它的一个算是个概念啊,然后第三点的话呢,我们下边谈一谈什么呢,就这个约束呢,我们怎么去分类啊,叫约束的一个分类。嗯,好约束的一个分类,那么这个分类的话呢,我们从不同的角度呢,来去说啊,那首先呢,我们就要角度一。呃,角度一,我们怎么去区分呢?哎,我们这个约束呢,哎,比如说我们看看它作用在字段上嘛,那我们是作用在一个字段上啊,还是作用在这个几个字段的一个联合上呀,哎,所以我们从呃约束的这个叫字段的一个个数来进行区分。
11:13
啊。哎,个数上来进行区分,然后区分的话呢,我们分成了叫单列约束,哎,单列约束啊,以及这我用一个VS吧,哎,另外一个呢,叫做多列约束。哎,什么意思啊,你比如说我们针对于这个,呃,ID呢,我们给它上面加了个约束啊,比如叫飞空的是吧,然后呢,哎,什么叫多列数呢,我们比如说ID呢,跟这个name啊,我就这块一举哈,大家一听就完了,把这两个合一起,我们上面加了一个叫非控约束。啊,就是它俩合在一起呢,作用上一个约束,还是说呢,就单独一个字段的作用一个,啊就是这样一个区别,这呢是叫角度一,然后角度。角段呢,怎么着呢,我们从叫约束的一个作用范围啊。哎,作用范围或者呢,我们说从它这个定义的一个,呃,这个这个位置上来分,咱们分成什么呀,叫做哎,列级约束和表级约束。
12:10
呃,列级啊约束啊,还有这个表约束,那这块我们简单来去介绍一下啊,表级的一个约束,这个实际上呢,这个一听感觉有点夸张啊,就是感觉上,哎呀列举约束表示一个感觉挺高大上的是吧,那实际上的话呢,它就是一个作用的范围,或者我们叫作用的位置不一样啊,什么叫列举约束呢?就是我们是呃声明的时候呢,是把这个约束呢,指定在这个字段的后面啊。哎,声明此约束时。啊,声明此约束时啊,指定在啊,或者叫呃将此约束啊,也就简单一点。将此约束啊。声明在。啊对应啊,字段的这个后面啊,这个呢,我们就称为它叫列决数,什么叫表决约束呢,就是我们这个表中呢,所有的字段呢,咱们都声明完了,然后最后呢,我们去加这个表决约束。
13:02
啊,加这个表约束啊,就是哎在。呃,这个表中所有字段啊,都声明完以后。呃,声明完以后,然后呢,呃这个嗯在其啊声明完声明完啊在字段所有字段的后面。所有字段的后面啊,声明这个,呃,这个的约束啊,这个大家可能现在一看稍微有点懵啊,咱们下边一讲呢,大家就清楚了啊,其实非常简单啊,那就是他写的位置呢,是不一样子的,OK。好,那么这呢是我们说这个叫角度二啊,角度二啊,然后角度三呢,哎,这个呢,就是我们从这个约束的一个作用上来分。哎,约束的一个作用上来分,或者我们叫这个约束的一个功能上来分。那这个怎么去区分呢?哎,这个呢,就是我们下边其实要给大家一个一个的去讲解的这些约束,咱们这一章的话呢,实际上呢,就是讲这么几个约束啊,哪几个约束呢,首先第一个啊,第一个我们先来讲谁呢,咱们叫闹闹啊,这个呢,我们称为它叫非空约束。
14:14
哎,非公约数,好第二个。哎,第二个呢,我们讲一个叫unique。这个发音我发的准吧,有内是吧,这个叫唯一性约束。OK,然后呢,第三个,哎,第三个。第三个呢,我们讲一个呢,叫primary key。OK,这个呢叫主键约束。嗯,没问题,好第四个。第四呢,我们讲一下,这叫F。哎缝,那这个我们称为它叫外间约束。哎,没问题,好第五个。诶五五这个啊,哎,我们来讲一个什么呢,叫做check约束啊,Check约束这个呢,我们称为它叫检查约束。
15:03
好就它,然后呢,第六个。哎,我们讲一个叫default。这个呢,我们称为,它叫默认值约束。诶,默认值约束行,那这里边儿的约束呢,差不多大家呃,主体的啊,像飞空啊,唯一啊,这个检查约束啊,默认值约束啊,大家可能一看这个名呢,呃猜的也八九不离十啊,像这个主键跟外键呢,可能是稍微有点迷糊是吧?OK,那咱们下边讲解的话呢,就按照呃这几个顺序呢,咱们依次去讲解。哎,那么再稍微的再稍微的多说一个事儿啊,这1.3了然我们讲一个1.4,那约束呢,咱们说是作用在这个具体表中的这个字段上的,对吧。那么我们该如何去添加这些约束啊啊,这就涉及到我们去添加这个约束的一种呃途径啊,或者我们叫添加约束的这个场景啊,如何添加约束。哎,如何添加呢?诶,因为整体上是一样的,所以我们就写在这个头部了,哎,我们通常呢,是在create table的时候。
16:06
啊,十。这个什么呢,我们说呢,叫做添加约束。哎,没问题是吧,然后另外的话呢,如果我们在创建表的时候呢,没有去添加约束了,我们后期有没有办法再加上呢,也可以,那就是咱们在叫alter table的时候。啊,这个时候呢,我们是不是可以再去,诶补充去增加约束吧,或要增加吧约束,还有那我们在创建表的时候呢,加了一个约束,现在在呃后期的话,能不能把这约束给它去掉呢?诶实际上也可以,那也是在al table的时候呢,去增加约束,或者我们叫这个删除约束。嗯,或者呢,我们叫这个删除约束啊就可以了,整体上我们这个思路呢是一样的啊,所以这块呢,大家做一个这个了解啊。好,那么接下来的话呢,咱们就按照这个顺序啊,依次呢,去讲解我们这里边儿的每一个约束啊,那么最终的要求呢,就是大家在实际开发当中啊,需要掌握的就是在创建表的时候呢,咱们怎么把约束加上后期的修改呢?呃,用的相对来说频率上来讲呢,就会少一些,那杨IG呢,就是咱们在一开始造表的时候呢,大家就想清楚看看哪些字段呢,应该加什么样的约束,尽量呢,后期是不是就不要去改了呀。
17:21
哎,就是这样一个道理啊,行,那首先呢,我们把这个事儿呢说清楚啊。
我来说两句