00:00
好,那么关于我们说的事物的acid特性啊,包括事物的状态啊,咱们就说完了,然后下面的话呢,我们看一看如何在这个呃,真正的一个代码层面呢,我们去体现一个完整的一个事物,好这块呢,我们提到了有这个显示的事物,还有这个隐示的事物,对吧?行,那这块呢,我们就通过这个笔记这块呢,来进行一个阐述啊饮酒啊,这个我们就要事物的这个,呃,基础知识是吧,呃,事物。啊,这个基础啊,这个知识好,首先的话呢,我们把这个文件呢,咱先保存一下啊,CTRLCCTRLS啊,这个CTRLV啊保存一下好,那这块呢,首先我们提一下这个事物的一个完整过程啊,我这个先写一个这个一,哎,事物的一个呃,完整的一个过程,那完整的过程的话呢,首先呢,你这个第一步呢,是不是应该叫开启事物啊,哎,这个我写一个叫步骤一。诶,步骤一啊,开启这个事物好,那么开启事物的话呢,我们一会儿看一下这个代码上该如何去体现啊,这是第一步啊,你把这个事物呢开启,开启完以后的话呢,诶核心的来讲,我们要做的事儿呢,是不是你要接下来的这个一系列的这个操作呀,哎,那我就这样写啊,一系列的。
01:05
啊一系列的啊是我们这个叫AD,主要呢,就是我们这个D的个操作啊,啊一系列这个D这个操作啊,你比如说呢,我们刚才提到说AA呢,给BB这个转账是吧,这里边呢,我们就涉及到两个update的这个操作啊,这就一系列的操作了,好那就正常这块呢,诶去实现就行,有的多呢有的少。啊,有的事物里边两条,有的事物里边呢,是不是多条,诶那有同学说诶呢,老师呢,一个这个DL语句呢,会构成一个事物嘛,还是有可能的,那你这条语句的话呢,就是它独立呢,是构成个事物是没问题的啊。哎,这是我们说这个步骤,然后呢,这个诶步骤三。这个一系列的DMR这个操作,你要是都执行完了的话呢,我们就可以把它持久下来,持久化下来,那这时候我们使用的呢,是不是叫做哎commit是吧,相当于我们使用这个commit呢,是不是使得我们这个事物呢,进入一个叫什么呀,是不是叫提交的这样一个状态啊。啊,这里边提到一个叫提交的状态是吧?哎,那这呢,咱们嗯,就别叫事物的结束了啊,事物这个结束的话啊,这样说吧,哎,结束的这个状态吧,就啊其实有两种状态,一种状态呢,是不是叫提交的这个状态,咱们刚才说过了,哎另外一种状态呢,是不是叫,哎什么状态,就我们说叫终止的这个状态,对吧,OK。
02:16
终止的。哎,终止的这个状态,那么这两个状态呢,其实都是理解成我们的一个事物的一个结束的状态啊,事务结束的状态行,那么提交的状态的话呢,我们怎么去体现呢?那这里边呢,就涉及到了一个诶关键词,咱们在讲上面的时候呢,其实提到过了,是不是叫我们这个commit对吧。哎叫commit,哎这个是他,然后呢,这个终止的状态的话呢,我们也提到了一个这个关键词是不是叫做back呀。诶这样也就是说呢,我们这个事物你怎么体验它这个结束呢,就要么呢相当于他提交了啊要么呢,他就是给回滚了,哎就是只能是从这二选一,OK行,这呢是我们说的一个完整的一个过程了,这个大家首先清楚,那么第二个事儿呢,我们来看一下,到底该如何呢去开启事物呢,哎首先呢,我们提一个呢,叫做呃,显示的一个事物。
03:07
啊,那么有显示事物呢,似乎呢,是不是还对应着另外一个词呢,叫做隐示事物啊,啊没有问题,咱们前面的话呢,其实提到事物的时候呢,都算是这个隐示事物啊,咱们下面呢,来看一下这个显示事物,那显示事物的话呢,我们第一个问题呢,就是该如何开启呢。啊,如何开启事物是吧?哎,这个时候呢,我们可以使用这个关键字啊,关键字那一个呢,叫做start transaction。大的啊,穿。Section是吧,哎,这样的一个方式或者的话呢,咱们还可以简单点呢,就写一个叫begin。啊,写个begin也行,那有同学会想说,那这两个都行的话,那我就选择这个begin了,因为这个比较短一些是吧?哎,选择begin没问题哈,但是呢,我们如果是要是使用这个start transition的话呢,它还可以表达更复杂的一个,呃,一个一个一个事儿啊,就是我们这个start transition呢,我们说后面啊可以跟啊可以跟什么呢?啊一个呢,我们叫做read,我就写成小写了啊叫read only。
04:04
啊,或者我们还可以呢,跟一个叫啊,还可以跟一个什么呢,叫with,叫consistent snake啊。Consist。Tent。啊,Consistent啊,Shoot这个呢,叫开启一致性读啊这样的一个过程啊,啊shoot呢,就是快照的意思了,行,那这个是什么意思啊,就是我们呢,如果你要是使用的叫start transaction后边呢,直接跟了一个叫read only,这就表示呢,我们开启的当前这个事物呢,它只是一个只读事物一二级呢,你只能进行查询,你不能进行增删改操作啊,你要想进行增删改操作的话呢,那你就要用这个read write这样的一个哎模式。啊,然后呢,我们这两种模式的话,你也可以跟我们这个开启一致性读呢,去做这个搭配啊呃,这个它呢,就是第一个呢能跟第三个搭配,第二个能跟第三个搭配,但是你一定要注意,第一个跟第二个呢不能搭配,因为它俩呢是不是只能二选一,要么呢你是只读的,要么呢你是可读可写的,不可能他俩呢就连在一起,对吧?哎,就没有意义了啊行,这呢,就我们说的这个叫start transaction呢,它会后边跟这个结构,而这个begin的话呢,就不能跟了啊有这么个区别啊,这是一个点,另外的话呢,那就说诶我要是使用这个star transction,我后边啥也没写呢,哎,啥也没写呢,默认情况下呢,就是这个叫read right啊,所以我们在这可以写个这个就是一个默认情况是吧。
05:24
诶,默认的这样一个场景,OK啊,这个保存一下行,那我们通过呢,叫a star transaction或者begin啊,咱们就把它启动起来了,接下来的话呢,就还是上面我们提到的这个一系列的这个DMMR这个操作。啊,这个操作,然后最后的话呢,诶你是commit呀,还是这个roll back呀,哎就是这样的一个过程。啊,这个大家注意一下,行,这里边呢,有一个小细节啊,我们稍微说一下,就我们刚才提到了,是不是这叫read only是吧?诶它呢只能是读,不能够进行这个诶增删增删改了啊,诶这里边呢,诶说是不是严格的说就不能增删改呢,其实有个特例啊,这个我们这时候所谓的这个增删改操作呢,诶就是你这个表啊,你要是开启针对他的只读呢,你就不允许责人改了,主要因为这个表呢,它可能被别的事物呢操作,所以说呢,我们就不让你去这个责人改了,但如果说这个表呢,只让你当前这个事物使用啊,那这块呢,别的事物呢也使用不了,那你是可以怎长改的,那什么样的表具备这样特征呢?就是我们所谓的这种叫什么呀?诶,这个临时表啊,这个临时表的话呢,它只在咱们当前这个绘画当中呢,起起作用了,诶当前绘画的话呢,那就是你当前这一个事物了。
06:28
别的这个事物呢,也看不到啊,所以说你针对这个临时表,在你使用了叫read only的这样的一种模式下的话呢,是可以进行自然改的啊,当然这种临时表呢,咱们出现的场景也比较少啊,所以大家呢,理解一下这是一个特殊情况啊就可以了。没有问题是吧,好,那这呢,就我们最终呢,说清楚了这样一个过程,然后呢,在这里边还有一个点呢,就提到了一个叫做诶same point这样的一个诶关键字啊关于那个simple泡的话呢,诶其实呢,针对的是我们说在这个终止的时候,诶在这种终止状态时候呢,你看我这里边呢,是不是只写了一个叫做roll back对吧,我没有写或啊roll back to。
07:06
啊,就是我们说这个终止状态就只有这个roll back啊,大家注意只不过呢,在这个里边呢,它有一种诶,我们会用到的一种场景啊,叫做这个保存点是吧。哎,保存点呢,我们就称为它叫point。诶这样的一个关键字啊,那么这个保存点是个什么概念呢?诶首先呢,我们说清楚啊,哎,你比如说呢,这是咱们一个,呃,事物的一个开始,或者呢,相当于是不是开启了,开启以后呢,我们针对比如说这个表里边我做了一个,嗯,咱们比如说呢,减了100块钱吧。诶针对这个AA这个账户呢,我减了100块钱是吧?嗯,减了100块钱之后的话呢,我再进行一个这个,诶这个减到这个操作,我又减了100块钱,然后呢,我这里边呢,诶又进行了一个减100块钱,那是不是我减过三次100了,对吧?然后最后这块呢,诶在到这块呢,如果呢,我是commit了,那相当于这个A呢,是不是一共减过300块钱,那这个时候相当于持久化保存起来了啊那如果说我们要用这个back呢。
08:01
哎,注意这时候呢,中间啊,我们这时候呢,使用的叫start transaction,比如说是吧,然后呢,这里边儿呢,诶这个操作的话呢,中间都不会涉及到这个事物的一个终止的,哎,那我们走到最后的时候呢,我要点这个roll back的话呢,是不是就回滚到我们最初的这个状态了,相当于这300块钱呢,是不是都没有减,对吧?啊,那是不是会出现这样的场景,就是我们中间操作的时候呢,有可能你一些失误呢,写错了什么意思啊,你比如说我们这个减100块钱,然后接下来我要再减100块钱,结果我一不小心写成加100了。对吧,中间呢,你可能会有一些操作呢,诶写错了,那怎么办呢?你这个要一回滚的话呢,是不是就回滚到我们最初你可能做了好多这个操作了,一回滚是不是回滚到最初的这个状态了,这个中间这块呢,都白做了啊那怎么办呢?我们就有可能会出现啊在你这减了100块钱之后呢,我这个位置呢,诶我就去设置一个啊s point。啊,我就设一个point。啊就简写了啊S呢,比如叫S1是吧,诶我就设这个保存点了,然后的话呢,诶你写这个加一百一看,哎哟,写错了是吧,不应该加100的,我应该是减100的啊哎,怎么办呢?你这呢就roll back to哎,一。
09:05
诶,我1BACK to这时候呢,相当于你刚才做的这个操作呢,就失效了,你就相当于回滚到我们这个保存点了。国道这保证点注意啊,大家一定要注意啊,那这个时候的话呢,我们算是终止的状态吗。不是的,你这个状态呢,是不是应该在这儿你commit了,或者呢是roll back了,所以说我们只是回滚到这个跑存点以后呢,你还得呢接着考虑,你是到这以后呢,你是要roll back呀,你还是要commit呀,然后你要commit这块呢,相当于他自己独立的就构成一个事物了,那你说不不行,我现在还接着下边还要减呢,行,那你就回滚到我们这个保存店以后呢,你接着再去减就完了。啊,然后再往后走,你最后呢,再看你是像commit了还是这个back了啊,这个大家注意一下啊,也就是说呢,咱们这个SIM的话呢,它不是咱们事物的一个啊,你比如说back to simple呢,不是我们的一个最终的状态,它只是呢,中间过程当中方便我们在操作的时候啊,你比如说咱们一个事物的话呢,中间你要操作这个步骤呢,非常多,这么多构成在一起,是一个事物,那不排除呢,有可能你操作了一半的时候呢,可能写错了,但是这时候你你要回滚的话呢,之前做的都白整了,还得重新整一遍,你可以呢,诶我这仨搜呢都没写错,我就先设置一个s point。
10:14
哎,然后呢,你再往下写,写错的话呢,你就回滚一下到这儿,然后呢,再接着输入,再往下重写,哎,就这样一个相当于优化我们操作的这样的一个功能啊。那么如何去设置呢?哎,这里边你直接写一下叫point,起个名,比如叫SE就行了,诶后边你要能用到的话呢,你就roll back to s SE啊就可以了。啊,那如果说你这个保存点呢,没有用了,这叫release point1啊就可以了啊,这就关于我们这个保存点它的一个使用啊,我就说清楚了。好,那么关于我们这块呢,其实就没啥了哈,这叫显示的事物,好,那下边的话呢,我们再看一看,这叫隐示的事物。啊,饮食事物呢,其实我们在前面讲到这个table啊,讲到这个delete from的时候啊,当时呢,其实咱们就是用的呢,叫这个饮食食物了。啊,因为呢,咱们说这个事物呢,它是不是有开启之说,还有这个结束之说是吧,然后结束的话呢,我们都是这样来来去体现的,那咱们当时开启的时候呢,可没有用过这个start transaction或者begin,对吧?哎,是没有的啊。
11:13
行,那这个隐食事物这块呢,我们首先呢,就要提到一个关键字啊,这个关键字呢,是不是叫做auto commit是吧。哎,关键字啊。哎,Auto,诶commit啊大家还记得呢,以前我们是不是做过这样操作呀,哎,我将叫auto,诶commit是不是我们改成是一个false了是吧,当初我们做过这样的这个行为啊,那首先呢,这是我们对应的一个变量啊,我们可以呢收。S。啊,然后呢,Like啊,我们这里写一下啊叫auto。Commit行,我们查看一下啊,这个变量的一个情况来凑齐。那这时候呢,我们会看到这个变量的值呢,是不是个on的状态啊,那IG呢,就是我们现在呢,哎,做的相关的DMR的操作呢,它都是叫自动提交的啊什么意思啊,诶我就直接从这里边粘一下了。
12:03
比如说啊,我把这个CTRLC一下过来。比如说的话呢,在我们当前这个auto commit是on的这种默认的这个情况下,哎,默认的是on是吧,在默认的情况下呢,我们每一个这个D这个操作它都是一个独立的失误。啊,那么此时啊,我们这个这条啊,DML这个操作啊,是一个独立的一个事物。呃,下边呢,我们这也是相当于呢,我们这里边写的这两个DMR操作呢,就是各自是一个事物,就俩事物呢,就是一旦我们执行完这条语句之后呢,它会默认的有一个commit提交。啊auto commit嘛,哎,自动就提交了,那提交不就意味着我们这个事故是不是就结束了。啊,这是一个,然后这呢也同样的如此啊,同样如此,我们把这种呢特点呢,就称为呢,叫做自动提交了啊自动提交了,呃,这是我们说的这样一个行为是吧,那我们下边一个问题呢,就是说咱们想关闭这种自动提交怎么办呀?啊,如何关闭啊,这是我们说的第二个问题啊。
13:04
爱自动。还自动,诶自动是吧,还这个提交。那如何关闭这个自动提交呢?诶这块呢,我们主要呢,提两种方式啊,这个诶方式一,诶方式一的话呢,诶大家也能想到了,就是我们前面做的是不是叫set auto commit是不是等于false啊。哎,我们这样呢,去操作一下,哎这样操作完以后啊,比如我现在我就操作一下了,然后呢,你再去查看我们这个变量的这个池呢,它是不是就变成一个off的状态了,行,那这呢就意味着我们当前的诶这个DM2这个操作呢,我们在执行完以后的话呢,它就不会自动的进行commit了。啊,那他要不会自动进行commit的话呢,我们比如说呢,把这两个呢放在一起啊,此此时的话呢,它就不是一个事物了啊,这两个合在一起,如果呢,我们后边咱们执行了一个叫commit啊或者诶我们执行了一个叫做back。哎,执行了一个,那么相当于呢,就是我们这两条语句是不是合在一起,构成了一个独立的事物了。
14:05
对吧,哎,这就我们说的这样的一种方式。啊,这个呢,咱们前面讲的时候呢,其实用的就是这种方式啊,那这里边大家要注意的一点,就是咱们现在的这个set auto commit呀,它呢,是不是只针对我们说DM这个语句是有效的是吧?啊针对于这个DM啊,这个操作呢,是有效的啊ug呢,就是针对我们这个DDL这个操作呢,哎,是无效的。啊,一会儿呢,我们再说一下这个隐视的,他就会提交的这样的一些行为都有哪些啊好,那这呢,咱们主要呢,指的就是这个DL操作。诶这个呢,是我们说的一种方式啊,之前呢,咱们是讲过的,然后呢,第二种方式是什么呢?诶这块呢,就提到了跟我们第一种叫饮食的这个事物呢,去结合的一种方式啊,第二种方式呢,就是呃,我们啊在。哎,相当于是呢,哎这样啊,相对呢,是在咱们这个auto commit是true的这个情况下。哎,这个为哎处的这个诶情况下啊,这个咱们先明确一下,不是因为你这个只能改成false了啊,你还是个true,在这种情况下呢,如果我们呢,使用了叫呃start transaction啊,或者呢,你使用了这个叫begin啊。
15:12
来使用它,哎,或者是啊,比begin来开启事物,哎,那么。哎,我们这个DM2这个操作呢,哎,就不会啊,自动提交数据。哎,行,这个呢,大家应该能明白了,言外之意呢,就是比如说我这样写了啊叫start transaction,我写完以后的话呢,咱们又把这两个呢,Update我就放在这了,注意此时的话呢,咱们这个auto commit还是true的啊,他是true的情况下呢,只要你前面加了这样的一个语句,诶这时候呢,他哥俩呢,就比较老实的说,诶我我就不提交了。啊,我就知道呢,你现在呢,想开启一个新的事物了,是吧,我就默认就不提交了,他就这意思,然后最后的话呢,你要是这两个语句呢,就构成了一个事物的话呢,最后你通过commit或者的方式呢,来结束我们这个事物。哎,就是这两个方式。
16:01
行,大家呢,体会一下啊,一共呢是两种方式啊,那么整体来讲的话呢,是不是我们要灵活一点来说,诶或者规范一点来说呢,是不是咱们就自己呢,主动的是不是启动一个事物对吧?然后呢,咱默认的情况下呢,是不是把这个auto commitm可以改成这个force的状态啊,咱就自己呢,主动想启动失误,你就用这样去写接束事误啊,你就看你最后呢是提交还是回滚啊就可以了。好这呢,就我们说的这个点啊,然后呢,回过来我们再说一下什么呢?诶说这个隐视的就会把这个数据呢,做一个提交行为都有哪些啊,其实咱们前面呢,讲到这个创建表啊,管理表的时候呢,提到过啊,诶包括呢,ET table是不是就属于这个DDL这个操作了,对吧?它会自动的提交数据的啊说哪些行为呢,会导致我们这个哪些行为呢,是隐饰的。把数据就一定会提交呢,呃,压G呢,它就不受我们这个auto commit的一个控制了啊有这样的一些,第一个叫数据定义语言,就是我们所谓的叫DDL。啊,这个大家都清楚啊,我们不多不多说了,然后下边呢,叫隐示的使用,或者是修改这个MYSQL数据库中的表啊,针对数库中的表,比如auto user啊,你像修改用户create user啊,Drop user grant rename user啊,Revoke set password诶这样的一些。
17:16
操作。对吧,诶针对用户的一个操作,针对我们赋予权限回收权限的这样一系列的操作,诶这些的话呢,也是会自动的提交数据的。啊,你即使呢,有这样一个操作也白扯是吧。好,这是这是一波,还有一波的话呢,是这样一个场景啊,这个大家呢,有可能以后会遇到哈,就是咱们写了一个begin,然后呢,写了一个这个增删改操作对吧,正常的这个事物呢,我们现在还正执行呢,但是呢,我们没有写commit,也没有写roll back,然后紧接着呢,你又写了个begin。啊,那时候呢,就得说,哎,那那你这这个事务还没完事呢,又开几个事务,那怎么办呢。啊,这个时候呢,我们说呢,上边这个事物呢,它就自动的就提交了。啊,这个事物呢,就自动的就提交了,我们也成为呢叫也是的就提交了啊这个大家要注意一下啊好,这是我们说的一个事儿,然后下边呢,就是当前的奥commit呢,这个系统变量值呢为false,哎,当我们手动的把它调成on的时候。
18:11
啊,也会隐私的提交咱们前边的这个所属的这个事物。啊,你就好比是我们这块,咱们呢是呃这个方式一是吧,Set out commit等于false了啊这个执行完以后的话呢,我们这块呢,执行了一条,执行了一条,然后又写了一个,哎这个又写这个update之前,呃,Update之前啊我们呢,呃就相当于是set auto commit,哎我把这个呢,就set auto commit等于true了。哎,这个你一旦写成处呢,前面这两个语句呢,就提交了。哎,就是这个作用。行,就这意思啊,然后下边的话呢,说使用这个lock tables或者unlock tables啊,锁定表或者说解锁表,这个时候呢,也会隐示的提交啊,这个是注意一下,另外呢,就是我们使用叫load data data啊load data的方式呢,来批量的往数据库中去导入数据的时候呢,也会隐示的提交之前的这个操作。然后再者呢,就关于MY复制的一些语句啊,比如slave啊stop slave啊slave啊change master,我们后边呢,讲到这个主从复制的时候呢,会有这样的一些操作行为,他们呢,也会导致领事的提交啊前面所做的这个事务。
19:15
啊,还比如说呢,我们前面提到过的,上一章讲的叫分析表是吧,检查表,还有这个诶优化表啊,这个这样的一些行为啊,这些行为的话呢,也会去啊饮食的提交啊,前边我们做的这样的一些事物的行为。简单来讲的话呢,就相当于是我们是不是主要针对的是这个DML这个操作是吧?诶这个操作的话呢,是受我们这个叫auto commit啊这样的一个变量的影响的。啊,这样变的影响的啊,这块大家呢,主要注意一下这个事儿。好,那这个呢,关于这个显示事物,隐示事物呢,我们就先说到这儿。
我来说两句