00:00
好,那么接下来的话呢,我们就按照这个顺序呢,依次呢,去讲解这里边儿的这些约束啊,那讲解这些约束之前啊,咱们首先呢,来说一个事儿,什么事呢?咱们前面讲查询的时候呢,咱们是不是翻来覆去的都是在使用咱们的就是员工表啊,部门表啊,是不是这些表,那么我们就想你说这些表里边呢,天然他们有没有一些约束啊。哎,那这块有没有呢?如果通过图形化界面的方式呢,大家比如说你打开这个员工表,那你可以在这个位置呢,哎,你就看到有一些这个索引是吧?哎,索引里边呢,有同学说,哎,这不是索引吗?也不是约束啊,实际上这里边呈现给我们的呢,就是一些约束,哎,就是一些约束,那么我们使用命令行的方式呢,如何去查看约束呢?哎,咱们这块呢,首先来说一下啊,这块咱们可以把这个呢看成是一个第二点就是呃,如何查看。在这个表中的这个,呃,约束好,那如何查看啊,包括呢,一会我们定义好以后呢,咱们就可以通过这样的指令呢,是不是做一个查看呀,啊这个指令的话呢,咱们直接粘过来啊,分析一下就可以了,这叫selecting from,一看呢,是不是通过一个表啊,这个表呢,是在我们这个information scheme一个数据库下的,那也就是说我们这样的一个数据库下,这呢是咱们系统是不是自带的呀。
01:12
啊,自带的,然后在这里边呢,它有一个叫做table cons啊cons啊,那就找我们下边一个叫table啊cons就是关于表的一些约束是吧,一些约束where,这里边相当于一个字段啊,叫table name叫什么呀,我们把这里边儿写上叫employees。就是员工表吧,来我们选中以后呢,做一个执行好,这时候呢,大家是不是就能看到我们这个表当中,我把这个就收起来了啊,这个表当中呢,我们员工表里边呢,你看它有好多的这个约束,这是它约束的一个类型,这呢是它的一个约束constraint name啊,它的一个名字,这是它的一个,诶所在的这个数据库针对的表啊,这块你看都给我们呈现出来了。呃,也就是说呢,咱们前面呢,在查询的时候呢,已经呃涉及到了约束,但是我们没有感觉得到,是这意思吧,那我们查询的时候呢,会有约束的影响嘛,呃,其实会有的啊,因为约束呢,我们会涉及到他们会有一些比如说逐渐索引和唯一性索引的问题,那我们查询的话呢,就要用这些索引了,所以约束呢,不管跟增删感有关系,跟咱们查询呢也有关系。
02:15
啊,也有关系,好,那我刚才说的主键索引,唯一性索引,大家可能听不懂,咱们到下篇当中呢,重点来去讲解好这个事儿呢,大家知道我们如何去查看就可以了,那么接下来的话呢,我们就开始一个一个的来讲解这些约束,那首当其冲的话呢,是我们叫闹闹这个非空约束啊。没问题行,那首先呢,我们来看一下这个课件。非空约束呢,顾名思义就是限制某个字段,或者叫某一个列呢,它的这个值是不允许为空的啊,你像我们这里边有张表,这个last nameme还是date啊,比如salary这呢,都是不允许为空的,而这个员工呢,他所在的部门那是有空的情况啊,因为我们说有的员工他不是没有部门嘛,可能是刚入职的,还没有指定部门的,对吧,那这时候呢,它就是一个空的,那相当于这一列呢,就没有去啊,加一个not not的一个限制啊,那我们如何呢去这个体现这个限制呢,咱们用的关键字呢,就叫做闹闹。
03:09
哎,就叫做这个not nor啊,就它。默认情况下呢,我们所有的类型呢,都是可以为no的,哎,默认的时候呢,都可以为no,也就是说呢,我们必须显示的去加上这样一个约束,才能够使得这个字段呢,它在赋值的时候呢,不能为no。啊,不能为闹咱们呢,可以给某一个列呢,去设置这个,呃,这块注意啊,针对于咱们这个闹闹来讲呢,它是不能够给这个组合来设置的。哎,不能跟组合来设置的啊,就是它只能是针对于某一个列来设置啊,这块呢,稍微小心一点。然后下边呢,说一个表呢,它可以有很多的列都设置的,这叫非空的约束啊,这是没问题的,在下边说空的字符串就是我们一个单引号,一个单引号里边啥也不写,这个呢,它不等同于no啊,这个一说大家都明白,咱们前面讲闹的时候也说过,那呢不等于同于零,也不等同于这样的一个空串是吧?好,那如何去添加,就下面呢是这个举例了,咱们就直接呢在代码这块呢,给大家去讲解,好那首先呢,我们讲如何添加,如何添加啊,咱们说呢,在创建表的时候呢,是不是可以添加呀,哎,所以我这呢写一个3.1啊在。
04:12
啊,创建create。这个a table时。嗯,这个添加约束。OK,行,那我们就来讲一下,那这块呢,我们去这个添加约束,咱们得创建表,那创建表呢,咱们也整一个新的数据库吧,啊这块我来一个create一个data,嗯,咱们叫DB test13吧。然后呢,我们,呃,其实这个字符集我就不设置了啊,因为咱们这个默认的就是UTF8了,每次我就不写那么长了,好这样呢,我们去做一个创建。创建好以后的话呢,我们这块呢,做一个use啊DB test13好,你看这块呢,它显示的不是我们这个数据库啊,一运行是不是就可以了,那接下来的话呢,我们在这个数据库下呢,咱们去创建一张表啊,Create一个这个table。
05:01
那比如我们这个叫。嗯,起个名吧,我们叫T1吧。在这里边大家看我们指定一个ID啊,比如是一个int类型的,嗯,指定一个,比如说叫,哎,咱也叫last name吧,它是一个what类型啊,这个来一个15,我这呢写几个字段来一个email,这个叫邮箱,那也是一个whatar类型的。啊,比如来一个二十五行,再来一个这个,比如叫嗯,Sorry吧。好,这个我们写成一个,呃,咱们说呢,是不是尽量的是用这个decim是吧?啊行或者用DEC,比如说十逗号二,OK,行这呢我们就指定了四个字段,那么这四个字段呢,原来我们在造表的时候呢,没有提到过约束,现在呢,咱们要做一个添加了,那这时候添加的话呢,怎么做呢,针对于咱们这个not no这个约束啊,哎,这哥们呢,他只能够用这种叫列举约束的方式。啊,它呢,不能够使用表约束啊,其实也正因为它是用列举约束,它就只能是不是作用在你对应的字段上,所以呢,它哎也就不能够使用这种组合的了。
06:07
啊,有同学可能有点听不太明白啊,组合的时候呢,我们得是不是用表约束在整个后边呢,说你是好几个约束,哎,好几个字段加一起加,加了一个约束是吧,你要在这个字段后面呢,你只是针对这个字段有效果的啊,所以你就不能够去好几个联合在一起用了啊好,那这里边儿呢,我们看一下这个闹闹。这个时候呢,大家一定要小心,就是你不能乱加啊,你根据实际开发中的场景的需要,你看哪些呢?需要加你就加,比如说ID,那我们每个员工呢,都有一个ID,是不是他应该加上一个非空吧,哎,我们就这样加一个叫nono。也就说这个last nameme,嗯,Lastname这个我们叫姓名是吧?嗯,那这个加不加呢?呃,那你想想员工的话呢,如果我们这个是员工的话呢,是不是通常都应该有一个对应的姓名啊。啊,没有问题,所以这块呢,我也加了一个叫not no。在闹闹啊,那这个呃,邮箱工资啊,有可能都还没定啊,那可能他们在复制的时候呢,就是这个闹是允许的,行,咱们暂且呢这样来理解,好选中以后呢,我们做一个执行。
07:08
哎,是不是就可以了,执行完以后呢,大家你看啊,我这呢,通过叫de啊,叫TEST1啊,我就这样写一下了,来我们选中了执行大家呢,会发现呢,我们这个时候在这个位置呢,你看这两个是不是就no啊,那young呢,就是不允许它们是啊空的,那或者你在这个位置呢,咱们改成了叫TEST1,那我们选中啊,咱们执行一下。啊,那这个位置呢,它就没给我们显示了是吧?哎,因为针对于我们这个叫非空率约束的话呢,哎,它呢相当于是一个比较基本的一个场景了,哎,我们这块呢,就没有在这儿呢去呈现,那我们后续其他的一些约束呢,哎是可以看出来的。好了,那这块我们拉回来。那既然呢,我们去设置了这个飞空了,它影响的是什么呢?影响的就是我们赋值,你看下边我们来做测试啊,我们隐私着into一下,这个叫T1,好,嗯,这个位置呢,咱们就显示的把这几个写上啊,Last name。
08:02
啊,这个email,嗯,Salary OK是吧,然后values好,这时呢,你看我去复制,咱们先整个靠谱的这个叫这个Tom,这个email的话呢,嗯,叫Tom那126.comm好,再来salary,比如说三千四啊没有问题,好选中以后执行。这个数据呢,我们就添加进去了,那我们接下来再来啊走一下,那现在的话呢,我们比如说是变成第二个人了,这时候呢,他的这个姓名啊,我说哎呀,这个我不太清楚啊,我就写了个now,哎,接着的话呢,比如说这块也不太清楚啊,这块活咱们先不动吧,咱们就先这样啊好,此时的话呢,我们去执行,大家会发现呢,我们这是不是就有一个错误信息啊。啊,相当于他就报错了,说呢,你这个last name呢,它cannot be not,哎,是因为我们给它设置的是不是一个非空的要求啊好,这是一个场景,然后CTRLC一下,哎,我们再过来。嗯,这个位置呢,比如我们给他写上。嗯,咱们写上,比如说叫这个翟瑞啊。
09:00
好,这个呢,我们也写成叫Jerry。啊,这个就不改了,然后这个位置呢,我们改成是个no,那是不是也不可以啊,选中执行,哎,你看ID呢,不让是no。OK,没问题是吧,哎,这个呢,大家应该都能看得懂,就是因为呢,我们对应的这个字段呢,它不允许你设置为空这样的一个场景啊,一个场景,好我再给大家举个例子,这个时候你可能觉得会有点隐蔽啊,比如我这里边儿我写个ID啊,我写一个这个email。哎,没了,然后呢,Value一下,现在我写个二啊,这写一个这个啊,比如说叫ABC啊126.com。能理解吧,好,你说我们这时候呢,添加能成功吗。来运行一把,哎,你看这时候呢,是不是也错了?哎,因为什么呢?大家你先别看这个具体的这个描述啊,哎,为什么错了呢?你想想我们再给这两个字段去赋值,剩下的last name和salary呢?没有赋值,那相当于呢,他们是不是就要复为一个now啊,那他们要复为now的话呢,相当于是不是这个字段,哎,Last name呢,还是一个now值是不允许的啊,所以就报错了是吧?但是这个报错呢,大家可能不太能理解哈,说怎么报这个last说没有一个默认值呢?
10:12
哎,因为这个时候呢,就是当我们没有去啊,给这个字段赋值的时候呢,它一般呢,是先来找一下有没有默认值。啊,那如果它是有默认值的啊,他就考虑用默认值的,没有这个指定的显示的默认值的,那这块呢,就用no了,用no咱们要求不能是no,哎,但是他报这块呢,说你没有默认值,哎,就是这个意思。啊是这个意思,行,哎,咱们到这个这一章的最后呢,会谈到一个面试题啊,这个我们可以先看一眼也行,这个面试题里边呢,你看就是这么个情况。啊,你看这呢,是不是有这个默认值的一个意思是吧?哎,到时候呢,咱们再去说啊先拉回来啊先拉回来,我们先别看那么多呢,啊好,那么这呢,就演示了一下,我们加上这个非空约束以后呢,在实际这个生产环境当中,它的一个限制,对吧?哎,包括呢什么呀,修改表是不是也会出现这样的场景,啥意思呢?你比如说这一条数据我们是不是添加进去了,现在呢,我就想给他这个ID呢,设置成是个闹,你觉得可以吗?
11:11
是不是也不可以啊,比如说update啊,我们叫这个哎,TEST1,那我们叫set什么呢?ID呢,那等于一个no,然后呢,说where什么呀。咱们这个ID等于一把ID等于一的这个啊ID啊,这个有点怪怪的,那咱们改这个last吧。把它呢,改成这个no。啊,或者咱们先改一个它吧,先改这个email啊,这个呢,可不可以改呢,是不是显然是可以的呀,啊但是呢,你要是改这个lastname呢。那是不是就不行了呀?来来走一下啊,又会报错啊,那也就是说呢,呃,我们去设置好这个非控约束以后,它对于咱们这个增删改啊这样的一些操作呢,是会产生影响的啊OK,这呢,就是我们这样的一个演示的一个情况啊,演示一个情况。好,那这个呢,我们就说清楚了,在这个造表的时候呢,如何去添加了,那CTRLC一下,我们说造表的时候添加,那我们要是忘了的话呢,我们是不是还可以在什么呀,叫out table的时候呢,去做一个添加呀。
12:12
来我们看怎么去做,怎么去做,首先呢,咱们de看一眼。啊,咱的TEST1。选中。执行现在的话呢,我们只有前两个字段呢,是不是这个no,我们再加一个,比如说这个email给它呢,也加上一个nono,那怎么做呢?哎,Out,一个table。那out table呢?我们就要TEST1,这时候用的是谁呢?注意是modify。哎,是猫范,然后呢,大家把这个email呢,原封不动的,像声明时的一样呢,把它写出来。呃,Email watch类型的只能是个25啊,然后呢,在后边呢,大家你就指定是一个not not就可以了。来这时候呢,我们选中啊执行。啊哎,选中我是不是执行了呀,执行的时候呢,说我们这个错误代码说呢,你这里边有个闹值,诶这是什么意思呀?哎,有点意思是吧,哎,大家你看一下,我这个时候呢,来一个select行诶from一下。
13:11
这个T一来,我们选中来做一个执行。啊,选中组合执行好,大家看这个时候的话呢,我刚才那会儿是不是做这个操作,我把那个email呢改成now了,你会发现呢,我们这个email呢是个now值,那为什么我们现在呢,就不让我们这个命呢,加个非公约数啊,是不是因为我们这里边存在一个闹值啊。你存在闹值的话呢,那你要是有这个约束的话,这岂不是违法了吗?啊,岂不是违法了嘛,是吧?哎,那怎么办呢?那这个时候呢,如果你要就给这个email加的话呢,是不是先把这个now值给它改掉啊。啊把它改掉就行啊,这个我们在上面这块呢,比如说加一下吧,Update一下这个test子一正好呢,我们通过这个呢,给大家演示一下这个问题是吧,挺好的啊啊我们就还是叫这个汤姆啊,比如说幺二六点这个com。Y2加ID呢,等于一。
14:00
行,那刚才我们已经说到了啊,因为呢,这里边有这个no值,所以我们去添加的时候呢,它就不让我们添加,但是当我们呢,把这个email呢,给它附上一个值的时候。哎,然后呢,这时候我们再去给他去添加。大家你看此时呢,是不是就不报错了,然后我们再去A一下一走,哎,你会发现呢,我们的email这块呢,是不是也是个no了。啊,也是no了啊,那同样的道理的话呢,就是如果我们这个表当中有多条记录。多条记录的话呢,只要你这里边儿有一个记录呢,它是一个not值,它都不会让我们把这个呢添加成功的。啊,这个大家要小心一点,行,这呢是我们说在out table的时候呢,是去添加约束,那再接着我们说下一个问题。那我们怎么去删除约束呢?那也是在al table的时候呢,我们去这个删除这个约束。哎,删除约束,那我们针对于谁呢?比如咱们就还是这个email吧,把他的这个非空约束呢给它干掉啊,其实非常简单,大家呢,只需要把这个原封不动,这个话拿过来以后呢,把这个note呢给它去掉就可以了,来我们选中做一个执行。
15:03
OK,然后呢,我们再desa一下,哎,大家会发现呢,Email这块难看,是不是就有意思了,哎,这时候呢,你再呃给这个表中,比如我们去修改这个ID为一的这个数据,我想把它改成no,可不可以呢?可以啊,因为它已经没有这个非控的约束了。可以是吧,行,那么这块呢,咱们关于这个飞空啊,那就说到这儿啊,整体来讲的话呢,相对来说还是比较简单的是吧,哎,知道是什么意思就可以了。
我来说两句