00:00
诶主见约束啊,咱们就说到这儿了,然后呢,我们下边呢,讲这个外界约束之前啊,咱们插入一个内容,这个呢叫做自增列啊,叫做auto increment啊,诶为什么要讲它呢?诶主要呢,我们这个auto inment呢,实际上它就作用在我们这个主件上的,那所以这块呢,我们把这个auto increment呢,我们给大家讲一下啊,你看这个名字啊,Auto increment就是自动的增长,是这意思吧,呃,它主要的作用呢,就是声明在某一个字段上呢,能够让这个字段这个值啊,能够自动的去往上增长。就是我们在往这个字段上去,呃,添加值的时候呢,咱们就不用专门给它去添加了啊,你就避开这个字段啊,你就添加别的字段就行,这个字段值呢,会自动的往上去增长,诶就是这个意思啊,一般呢,咱们实际上呢,这个自增长这个生命呢,都会添加到这个主键上啊,当然呢,说除了主键呢,呃,这个你也可以给它加到唯性约束的这个键上也行啊,唯性约束的这个列上也行啊,但是呢,在一个表当中,我们说最多只能有一个次增长的列啊,这个你要注意一下啊,这个你要注意一下。
01:01
呃,那么当需要产生一个唯一标识符或者顺序值的时候呢,我们就可以设置呢,让它去自增长,哎,让它去自增长就可以了。然后这块还提到说这个自增约束的这个列的数据类型啊,必须是这个整形的啊,你看我们下边举这个例子,比如这里边儿呢,我们给这个字段呢,我们加了一个叫auto increment。啊,他就给报错了啊,为什么报错了呢?啊,因为我们这个字段呢,上面是不是没有这个主见约束,或者说呢,也没有唯一性约束啊,他这块就报错了啊,就是这块呢,就不满足他啊然后这个呢,呃说为什么这块也报错了呢?呃,因为我们这个加了一个auto increment,它是用在这个唯一性约束倒是满足了,但是呢,它这个类型不满足。那这呢是一个窝差是吧,那我们要求呢,是不是得得是这个整形的啊,在整数的基础上呢,一个一个的去累加,你不能按个字符串去累加,那那怎么累加呀。对吧,诶这个我们注意一下啊好,那么这个呢,我们看一看啊,咱们平时开发当中都怎么用啊,咱们就主要呢,提这个事儿就可以了,行,那在这块下边啊,我们这块呢,在呃,这是叫这个呃,如何删,诶这个是。
02:08
哎,我看看啊。哎,我们这个是五啊,这个注意咱们这个标号呢,稍微调一下是五啊。然后下面呢,该这A5。啊,这个呢,我们该这个叫六了啊,这块我们说一下叫自增长裂。哎,是这样列啊列啊,哎,这个我们叫auto increment啊。哎,大写的啊,Auto啊INC,好,那这块呢,我们就直接呢,咱们比如说创建一个表啊,Create这个table,我们叫test,比如说七啊就这样,好在这里边呢,我们有一个ID啊,In类型的,然后我们再来一个这个叫诶last name啊是一个what类型的啊我们这比如说十五行,我这呢,就以这两个字段为例,那么刚才也提到了,如果说我们只是呢,在这个ID上面呢,加上一个叫auto。啊,叫increment这块呢,它是会报错的,是这意思吧,哎,这就报错了,因为我们上面没有一个是不是逐渐约束,或者是叫唯性约束啊,这个是不对的啊,那或者的话呢,就我们刚才看到的,我们把这个呢,CTRLX啊,我放到这个位置上也不行,因为它是一个watch char类型啊,不合适啊,或者说你这里边也加了一个叫unique是吧?哎,在它是一个唯一性约束的前提下呢,你再加auto increment这个,诶满足这个条件了,但是呢,这个类型这块呢,又不满足了。
03:26
啊,也不行啊,也不行啊,啊这呢就是我们说的这个意思,然后我们平时开发中怎么去用它呢?哎,我跟大家提到了,就是我们在主件上去用。And primary。因为primary key。啊,这样是吧,诶为什么在这块要用呢?大家你想咱们这个表当中,这个ID呢,是一个主键啊,就是说你必须呢去赋值,像以前我们要没有加这个自增长的时候呢,你想想我们是不是这么个情况啊,我们去这个往这个表里边去添加数据的时候呢,Values,诶刚开始呢,比如我们写这个一下边这个呢叫Tom,诶这就添加成功了,当我们再去添加条记录的时候呢,你输入这块呢,可以指明是个二。
04:05
啊,然后再次添加了,这写了个三,这写个四,下次写个五,每次呢还都得填,还得跟之前的还不一样,那我们这时候就想说,诶,能不能我们自动的去付这个ID这个值呢,它就是用来区分每一条记录呢,可能没有特别明确的一个意思了,是吧,那这时候我们就希望它呢,自动的给我们附上,咱们就可以加上叫auto increment。哎,就这样写,那一旦这样写完以后啊,这样写完以后呢,哎,那此时的话呢,咱们就在这个隐私的这个表中记录的时候呢,咱就把这个主见这个字段呢,咱们就不用管它了,诶你就把它去掉就行了。那就像我这样一样啊,咱就把它去掉就可以了,就不要去写了,然后这个时候呢,你看我们如果呢去执行。啊,这个说doesn't啊,这个这个还没创建呢,是吧,哎先把这个表呢,咱们先创建一下。创建好以后呢,咱们去insert来看我们执行,此时呢,你可以发现呢,是不是添加成功了呀,好,那我们看一下啊select行from一下咱们这个TEST7。
05:04
哎,我们选中呢,做一个执行,诶你发现这个ID呢,是不是就一了,好,那此时我们再去执行,再执行,再执行,或者点了这个三线,然后我们再去看,你会发现呢,是不是一次的这个ID呢,就往上去自增。哎,对吧,哎,那么我们以后呢,再去添加数据的时候呢,咱就哎在主件上加一个这样的约束,咱就不用管它去赋值了,它就自动的给我们往上赋啊就可以了啊,这要注意一下,然后这块呢,我们再说几个特别的情况啊,就是咱们开发中就这样用啊,不建议大家怎么用呢,就是我如下的用法啊,你看我们明明给这个ID呢,是主建加了一个auto equipmentment,其实我们这时候就不要再添加数据的时候呢去管它了,那我们就非得管,非得管这块你咋写呢,比如我写个零。大家你看我写个零可不可以?来,我写了是吧,来走一下。啊,是不是成功了呀,那这时候大家可能就会问说,那这时候我们这个ID到底是几来,咱们看一眼。是几啊?那是不是五啊?
06:00
哎,你看它当你写零的时候呢,它会自动的给我们往上呢,去依次去递增了,那这时候这不就六了吗。啊,这是一个情况,还有呢,就是当我们这个位置呢,我写的是一个nor的时候,那你看我写的是个nor啊,来我们选中了再去执行,来这时候我们再去select。哎,你会发现它是不是就变成七了呀,那那也就是说呢,啊,就是当我们向这个主键。啊,像主键啊,这个呢,注意是咱们包含了这个auto increment啊,CTRLCCTRLV。啊,这个的字段上啊的字A像主,哎,这个项错了。哎,这个当我们向主见的这个字段上啊,这个添加零,哎,或者是这个闹时。啊,我们实际上呢,哎,会是不是自动的,哎,往上递增的添加,这个就是指明这个这个字段的值是吧?呃,实际上呢,会自动的啊,这个往上添加。
07:02
那指定的这个字段的数值。哎,就按照你原来的那个auto increment你到哪了,你就接着往上去增,哎就可以了。是这意思吧,好,那这个大家清楚了,然后呢,还有同学可能说我我就是不按套路来啊,怎么办呢,你这不是到期了吗?我现在我突然我就非得给你整一个十。是吧,我非得整个十,那这时候我们这个能不能添加成功呢?来咱们走一把看看成功了,那我们这时候再去select,咱们看一眼,你看这时候呢,是不是就添加了一个十啊。哎,相当于呢,就是如果你要是指明了这个字段,指明这个值,这个值的话呢,是我们原来这里边不存在的,那它是能成功的,哎,同学可能想,那这样行,我复值呢。发散思维一下是吧,哎,这个我们再新复制一份。我这个来一个负十呢,咱们走一下看看,诶也成功了,那这时候这个结果会是多少呢?走一下你看负十是不是也进去了呀。啊,复试也进去了,大家这时候你会发现,诶复试呢,是不是给我们放到一开始的这个位置了啊,因为我们这是个主键,它在存储的时候呢,它这块呢,涉及到一个就是呃,有一个顺序的问题啊,那个小的呢,他就往前面放了,这个复式呢,它就放到前面了,哎,就成这个意思了。
08:13
哎,这个这个上面是个十。是这意思吧,好,那么在这种场景下,大家可能说老师我还有个问题,我现在呢,再去执行一个不包含ID的一个数据,那它会是什么样的呢?那咱们跑一下看看。哎,这块我们实际呢,再去执行一下,但是你看到是不是在你原来这个十的基础上再往上去累加了是吧?啊有点意思啊行,那这块呢,大家你不用刻意的去记啊,我只是呢,把这种特殊情况呢,给大家演示了一把啊这个呢,呃,实际开发当中呢,咱们也不会这样去做啊,开发中怎么去做呢,咱们就这样去做。哎,我们这块写一下说开发中,那一旦呢这个组件。啊,一旦这个主见,呃,作用的这个字段上啊,声明有。哎,声明有什么呢?我们叫auto increment是吧?哎,那么哎则哎,我们在添加数据时。
09:05
哎,添加。那数据是。哎,怎么着呢,哎就哎不要是吧,给就不要啊,给这个主键字段啊,去这个insert了啊。主见。哎,对应的这个字段啊,去赋值了,哎,这个大家能明白这意思就可以了,开发中我们都这样用啊,这呢只是我们玩一玩而已啊行,那这个事呢,咱们就说清楚了,这是我们在这个是不是在这个造表的时候呢,去加上这叫auto increment是吧。那么造表的时候呢,我们去加上这个auto increment了,那么是不是也可以呢,在这个呃,修改表的时候呢,给它去添加呀,啊,这个我标一下啊,这个在。啊,Create table的时候呢,去添加。啊,添加的好,呃,那么下边呢,我们说呃,如果你要一开始的时候呢,呃,没有加上auto equipment,事后能不能补呢?啊也可以啊我们说在啊alter啊,Table时。
10:06
啊,去做的这个添加。哎,这样啊,呃,但是这块呢,我们讲这个事儿,包括咱们讲这个呃,在al table的时候呢,去添加主键这个事儿,一般呢,咱们都不会去用al了啊,为啥呢?因为呃,咱们在一开始设计一个表的时候呢,都会有这个需求文档,文档里边呢,针对任何一张表,咱们通常都会去指明主件的啊,那指明好主件以后呢,有的时候我们这个auto equipment就也上面声明好了,所以在造表的时候呢,把这个事儿就都考虑上了。那很少呢,说是因为一开始造的时候没有,后边又加的,这种情况比较少出现。行,那这块我们就再来一张新的表啊,我把这个呢,我就CTRLC一下是吧,在这块粘过来,或者叫一个八。哎,然后这个位置呢,我们就不要了。哎,就不要了是吧,好,那此时呢,我们选中啊做一个执行。哎,OK了啊,这时候我们比如来个DEA啊,Test扒一下,好,这时候我们选中呢,做一个执行,好这时候呢,你看它上面没有提到auto equipmentment这个事儿啊,那我们怎么呢去给大家添加呢,叫al table啊,我们叫TEST8是吧,然后呢,我们叫modify,哎,Modify然后呢,对应的这个字段呢,是ID,呃,是一个int类型的,我们希望呢给它加上一个叫auto increment啊,就这样来处理就行,好,我们选中了再去这个,注意我们的ID呢,是不是已经是主键了啊,哎,这一你要注意它得有主键约束或者微型约束啊,再来。
11:26
哎,这就可以了,然后我们在DEA看一下啊,你看这个位置是不是就有一个叫auto increment是吧?哎,这就加上了啊好,这呢是添加,然后接着我们要考虑呢,是不是可以去删除啊,哎,这个还是在我们al aler table的时候呢,我们去删除。哎,删除啊,怎么删除呢?哎,其实也非常简单,就是我们把这个拿过来之后呢,针对于我们这个ID这个字段呢,咱们不让它加上这个auto increment,哎,我们就把它删掉了。啊,执行成功,然后我们在这个DEA啊跑一下,那这个是不是就没有了啊,这就可以了啊行这呢我们就说清楚了啊好,那这块说到这呢,其实也就完事了啊,这块呢,我们还想正常来讲就完事了啊,但是我们这块呢,还想给大家说一个事儿,就是我们想看一下咱们这个诶auto increment呀,因为咱们不是基于MYSQ8.0来讲的嘛,它呢在8.0当中啊有个新的特性,诶这个特性呢,跟原来的5.7啊是不一样的啊,咱们把这个事儿呢给大家呃演示一下。
12:24
哎,把这个事呢,咱们给大家演示一下,呃,那这块呢,我们先留这样一条代码啊,我们说先在啊my circle啊5.7中。哎,演示哎,我下边呢,就放的是5.7演示的代码,然后呢,我们哎哎就先就去了,哎,然后呢,我们在在这个8.0当中去演示,是这意思吧,诶CTRLC看这个传过来行,那五点系统演示呢,咱们就不能在这个里边了,我就放到这里边来演示了啊放到这里边来演示好在这里边的话呢,我们啊这个F5刷新一下啊,没有这个数据库,咱们先做一个创建。Create一个database。啊DB test13好,选中。
13:03
执行。Use一下啊,DB test13。选中。执行。可以了是吧,好下边的话呢,我们创建一张表啊,Create table,我们比如说叫test,嗯,咱们那块到test多少了。太八九是吧,好,我们这块呢,就也写个九。啊,我也写个九,嗯九好了,然后呢,怎么办呢,我这呢,就诶这么找一下,哎,还在这啊。嗯,整个ID啊,是个in类型的啊Mar key,然后呢,我来一个auto。啊,下划线啊,Increment啊,这个应该很清楚,咱们就用一这一个字段来去表示来选中呢执行一下。可以啦,然后呢,我们叫insert into,我们叫TEST9。嗯,我这么着吧,偷个懒。嗯。看大家能看懂吧。
14:04
应该能看懂吧,我们刚才讲到了,我们在给这个表中,你看我没有写,那就只给ID去赋值,赋值如果要写零的话呢,实际上呢,它会自动的给我们按照你本身的这个赋值的情况往上去增,是吧,那我这块要执行完以后呢,大家会发现是不是这样的一个场景啊,Select形from一下我们这个TEST9诶九啊。来我们选中,哎执行哎能理解吧。哎,我觉得应该能理解的啊,我们刚才已经讲过这个知识点了,那么在这个情况下呢,你看我delete。Delete from我们这个TEST9,然后呢,Where。ID等于四。哎,我把这个ID等于四的这条记录呢,我们给它删掉了。没问题是吧,好删掉之后的话呢,我们再去做一个添加,哎,我再添加好这块选中的执行。OK了是吧,好,那这时候完事以后的话呢,嗯,大家呢,这块我们看一下,嗯,我这块又添加了,来咱们看一下,大家你会发现呢,此时咱们添加的这个记录呢,是不是五呀。
15:03
啊,为什么是五呢?因为咱们原来已经到四了,那我现在呢,是不是,呃,这个把四给删掉以后呢,它并没有说从三的基础上再往后去走了,而是呢,还按照我们这个,呃已经到四了,然后再添加就变成五了,是这意思吧。哎,能理解啊,哎这呢,其实这种情况呢,我们称为呢叫裂缝啊,因为它中间感觉裂这个少了个四,因为你把四给删掉了嘛,是吧。好,那么接下来的话呢,我们把这个五的这条记录呢,注意看啊,我把五的这条记录呢,我给它删了。啊,那这时候呢,意味着我们表里边儿实际上是不是只有这个123。哎,能听懂啊,这个跟进我这个思路只有123行,那么在这个情况下呢,呃,我呢,把这个MYSQL这个数据库服务器啊,咱们给它重启一下。啊,这个不用保存了啊,哎,我呢把它重启一下,咋重启呢,咱们在这个位置啊,我输入这个CMD。啊,这个大家不知道还记不记得咱们重启这个事儿呢,是得以管理员身份去运行的啊,所以我这儿呢,得得这么着点一下了。
16:02
好在这块呢,我们首先诶不用首先了,就直接上来整就行是吧,哎,直接net,我们先在去做一个stop啊my circle,咱们是57,这呢是5.7的这个版本的,看走一下。好了,这呢我们就可关掉了,然后咱们再来一个ne呢,就要start一下my circle啊57,哎,把它再提起来。啊,提起来了没问题是吧?好,那么在这个场景下的话呢,咱们现在其实又是一个连接成功的啊,我这时候呢,去select形from看一下是不是就123啊好,那这时候呢,我们再我们在这标识一下啊,我们就要重启服务器啊,重启服务器以后呢,我们先做个查询。哎,刚才我也做了,哎,就是咱们看到的目前呢,是不是就123啊好,然后在这种情况下呢,我们再去做一个insert。哎,我再去做个inular into来,我们走起,走起完以后呢,我们再去做一个select,大家看。
17:01
大家看是不是发现这个情况了,我们此时呢,就是四了。啊,就是四了,你要按照我们刚才没有重启的这个思路来看的话呢,我们这个一直往下走,咱们把五也删了,按说呢,你要再添加是不是该是六了,但是我们重启服务器以后呢,你发现添加的时候呢,就变成四了,这个我们怎么去理解呢?哎,实际上呢,就是这个原因,咱们这个auto increment呀,它呢在内存当中维护了一个字段。啊,维护了一个这个值,这个值的话呢,在内存当中它就依次递增啊一咱们相当于刚才呢,就一二完了以后呢,三,然后咱们来了个四,后来我们把四给删掉了,哎,但是这块呢,它已经到四了,你删了是归你删的事儿,然后我们再添加的话呢,是不是就该五了是吧?哎,该五了,然后你要五呢,有可能你也删了啊,但不管你删不删呢,反正它已经到五了,这时候如果我们要不重启服务器,咱们接着去添加的时候呢,那就就该六了。啊,就成这么个情况,但是呢,我们把服务器给重启了,那就意味着内存中的这个值啊,它就不存在了,那么我们再添加的时候呢,诶,它就会先获取一下你现有的这个ID呢,都到几了,我们是不是到三了呀,那内存中因为已经没有了,它就记录一下你到三了,然后再添加的时候呢,它就从四开始的。
18:10
这是我们说这个叫5.7当中的这样一个场景,好,那我这里边呢,把这个CTRLC一下咱们粘过来。啊,粘过来我们放到这儿啊,这是我们在这个5.7当中的一个演示,没问题是吧?好,那我们同样的在这个8.0当中,咱们也这样去演示。我也这样去演示,首先的话呢,我们也创建一个叫TEST9来,我们走起。诶没问题是吧,好,然后呢,我们这块呢,去添加这样的,诶私教记录,添加完以后呢,我们去做一个select,那也是1234,这也没毛病,然后把这个四呢给它删掉啊删掉完以后呢,我们这个查看一下,那自然就没有四了,那我们再去添加一条记录。啊,添加完以后呢,我们再去做一个查看。啊,这个时候呢,是1235,这也没问题是吧,然后呢,咱们把这个五呢,那也给他删了。哎,我也给删了,删完以后呢,你就再查看,显然呢,是不是只有123了,好在这种场景下呢,咱们把这个八呢,也给它做一个重启,OK net stop on my circle,这个我们是80吧。
19:16
哎,这个重启啊,这个呢,我是5780,这个在哪看呢,这个大家应该都比较清楚,咱们讲这个一开始这个章节的时候呢,说到过,就我们实际上呢,是在管理这个位置呢,是能够看到的,对吧。哎,这块我们打开这个服务啊,就是你要是不会这个指令的话呢,大家在windowx当中呢,你可以考虑呢,去使用一下我们这个图形化界面这个方式啊,只不过呢,就是你要在Linux当中的时候呢,就要掌握这个指令了,诶我们刚才呢,把这个八零是不是给它关掉了,你看这时候就没有了是吧?哎,就没有了哈,然后呢,我们这时候呢,再把它启动起来啊net start一下叫MYSQL80。哎,把它启动起来。那这就启动好了,然后这块的话呢,我们做一个这个刷新的操作,那就启动了是吧?啊这就这意思啊好,那启动好以后的话呢,诶这时候我们首先呢,做一个这个查询,哎,我们看一下那还是123没问题,好关键的来了,我们此时呢ins into一下。
20:08
啊,添加了一条记录,然后呢,我们再去做一个select,注意看,诶你看这个时候的话呢,是不是人家还是六啊。啊,你把这个四跟五给删掉了,然后我们重启服务以后呢,发现人家还是从六开始,那这个我们能推出来一个什么样的结论呢。诶,结论呢,是不是就在于我们此时的你这个auto increment呢,它是一个持久化的,它不是像五点七一样,怎么着呀,是放在这个内存中来维护的,而我们8.0是放在哪了呢?哎,它有一个叫重做日志啊,Redo日志啊,Redo的一个log,我就把那个值啊,计数器的那个值就放在这里边了,然后当你不管重启服务也好,怎么样也好,然后呢,你在呃启动起来以后呢,它会从这个维度日志当中去读取你这个一开始的那个记录的值。啊,接着往下去写,哎,相应来讲是不是这个小细节点要更好一些啊。啊,这个大家要注意一下啊,这的是我们这个8.0的一个新特性啊,这个大家关注一下就行,好,那么大家需要记录的,我们关于这个auto increment呢,点呢在于哪呢?就是它通常呢,会结合着我们的主见呢去使用。
21:10
啊,推床结合的主键去使用。好的,那么关于它呢,我们就说到这儿。
我来说两句