00:00
它的这个主键和唯一键,这个搞明白没有,就这两个区别,大家看一下还有没有想问的,有没有没有想问的了啊,没有想问的呢?咱们就继续来说一下我们的,呃,就是关于外键的一些特点啊,因为像主键,外键还有唯一键这三个的话,考点比较多,所以咱们单独的拿出来说外键刚才提到了第一个小特点,那么要求它是在我们表上是不是设置外键关系啊,哎,这个一定要注意了哈,要求在从表设置外键关系啊,那么来去限制它里边的这个值啊,来自于某个表。第二点要注意了,就是我们呃从表吧,从表的这个外间列的类型,那么要求和我们就是主表,主表也就是它引用的那个表对不对?哎,和主表的对应列,我们把这个对应列称为关联列啊。
01:00
的类型是不是要求一致,或者说兼容,这个没毛病吧?啊,意思是说,你比如说我们就拿它为例,我的学员信息表里边的major ID引用了major表的是不是ID列呀,那你这两个列的类型是不是都应该是什么类型啊,Int啊,而且们的意思是不是也应该是一样的呀,都是代表专业编号,那你说他们的名字必须一样吗?名字,哎,名字是不是不固定啊,没有要求啊,所以说我们这儿写着哈,类型要求一致或姻或兼容,那么这个叫做名称哈,名称无所谓,也就是无要求啊,这个要注意,这是第二点,第三点,这一点可能大家平时不太注意啊,第三点呢,就是要求我们这个主表中的关联列必须是一个K,也就是必须是一个键,那这个K的话呢,一。
02:00
般的来讲就是指主见或者说是唯一啊,当然或者说是外键,但是已然没什么意义了啊,那我就这直接就说一般是啊,主见或者说是什么呀,为一见,而且在一般的话就是谁呀主见啊,什么意思呢?来咱们试一下。那刚才你看我们借两个表,我把这个表粘到上面去啊,要不哎我这样CTRLC要不一直在往上翻啊,这样的话就容易看晕,我这是不是刚才做的是这两个表呀啊,我放到上面来啊,我先这样撞了一下,撞了一下table衣服一个Dis没找好来注意看,那么假如说我把这两个表都先删一下,哎,这个表示删过了吗?诶来我们看一下好,他说这个里边因为被外键引用着呢,那么我先这个删这个表吧,删了然后呢再删它。
03:06
好,成功对吧,那这两个表都删除了,删除了之后,假如说我这个major表这个ID我没有加这个主键约束,我什么都没加,能看到吧,那么我现在创建一下,注意看哈,创建成功了,那么我现在呢,我的学员信息表里边有一个字段叫major ID,那刚才其实我们早就加过这个外键,实际上没报错吧,那么现在呢,我想再加一遍,所以说我执行他,你看是不是这个时候报错了呀,他说你不能创建哎,Create table不能创建这个表啊,但是他这个写的不够详细对不对,其实原因就在于你这个外键没有加上,因为他要求我外键引用的这个主键的这个ID列呀,必须是一个K,那么假如说我把这个K放上,再再让你看一遍,瞪大眼睛看哈。
04:01
哎,那么现在看一下能不能行啊,但这个表没有建好,现在是吧?哎,那么我还是得先删了它,再创建一下专业表,我说的对吧?哎,然后呢,我在干嘛,是不是创建一下学员信息表呀,好,哎,那么现在我们看一下成没成功,成功了知道了吧,所以说我主表里边的那个列呀,这个背也用的列呀,它是主键可以,那是唯一键行不行呀,Unique哎,其实也行,那么好吧,我们来去试一下,那同样我先把这个学员信息表给删除,然后呢,我再把这个major招表呢重新来一遍。啊,来了一遍,他现在是不是我一键呀,能跟上吧,哎,学员信息表我再去加遍外键,其他代码不变成没成功,成功了知道意思吧?啊好,这也就是我刚才提到的哈,那么它要求你主表的这个关联列或者被引用的列必须是一个K,这个K一般就是指主键文一键这些啊,当然其实外键也行,你要有兴趣可以自己试一下,意思是说你的major表的ID,哪怕是个外键,这个也不包错,但是有意义吗?你觉得你觉得有意义吗?没什么意义,对不对,没什么意义,一般的是这种唯一不重复的是我们去引用它才有意义啊。啊好,这个就给大家说明白了,那接下来呢,我们再看第四点,第四点的话呢,就是什么嘞?就是我们的这个要求是插入数据时,因为你现在涉及到两个表了,那你觉得你应该先插总表的数据还是。
05:45
先插主表的数据呢?那肯定应该先插入谁主表对不对?插数据时应该先插入主表啊,再插入是不是从表呀,这个能填上吧,就是学员信息表和专业表,你必须是不是先有了专业再招学生啊,对不对啊,那么我们删除数据时应该先删谁呢?对了,那应该先删除从表,再删除主表,你要不的话你想想呀,嗯,对呀,你比方说你这个专业表有两个专业,Java和H5,然后咱们学员信息表引用了对不对?那么你说我把这个H5专业删了吧,那你的从表里边是不是还有一些学生也用这个专业呀,那肯定不行,你得先把这部分学生是不是先删了呀?哎,再删专业,这么说能跟上吧,他是这个意思哈,行了,这是外间里边我们这个需要大家掌握的几个小特点,大家要注意了,呃,另外呢,说一下刚才有同学问。
06:45
碰到的一个小问题也非常好啊,说呀,咱们在添加列接约束时,我们举的这个案例呢,每个字段上是不是都添加了一个列接约束啊,我们能不能添加多个呢?这个是可以的啊,这个是可以的,什么意思呢?你比方说姓名我们添加了一个非空,那么我再想跟他去添加一个什么,呃,唯一unique哎,直接这么去加就行了,能看到吧?嗯,我再跟他加一个默认BOT啊,姓名呢,我们这个其实不太合适是吧?啊,不太合适,它这个本身是不是唯一呀?啊,那我这个先去掉啊,我的意思是说,你要是加的话,是不是挨个的往后加,用空格隔开,没有顺序要求去加就行了,来,我们可以去也是试一下,呃,我们先drop一下哈,Drop table是不是SQ音包呀,我就不粘那一部分了啊,然后现在我们去执行好,然后我再重新创建,是不是就看行不行啊。
07:45
啊啊,大家看能不能成功,是不是能成功啊,是可以的,对不对,好那行吧,那到现在这个就说完了,我们把这个停一下。
我来说两句