00:00
下来是不是就看一下在MYSQ中我们怎么去创建事物啊啊,那么接下来我们就说这个事物的这个创建啊,那说事物的创建之前,我们需要先了解一点,我们可以把事物呢进行一个细分,分为两类,一个呢我们可以称为隐食的事物,隐食的事物是指我们事物呢没有明显的开启和结束的标记啊,也就是你看不出来这是一个事物。啊,它是自动的开启,自动的结束的,比如像咱们已经学过的insert语句,Update语句,还有谁呢?Delete语句,其实都属于隐私的事物,也就是说像我们平时写一条音色的语句,就相当于开启了一个事物,能听懂吧,就相当于看一个事物,并且提交了,它是这样的。哎,那为什么咱们可以这么说呢?我们可以看一个变量哈,Show variables,这个是不是查看变量的意思啊,啊,我已经多次使用了哈,哎,这个里边呢,比方说我们来一个就是查看它auto me啊,应该是这个变量,我们查看一下这行,哎,能看出来吧,你会发现auto commit,它的意思是不是叫做自动提交呀,它的值默认的是什么啊?啊,翻译成我们的中文是开启,也就是默认自动提交的,这个功能是开启的。那么这也就意味着平时我。
01:29
我们写一个比方说delete吧,Delete比较简单哈,From我们的表where什么什么条件分号能看明白吧,啊,我这写全,比方YID等于一,哎,只要你这么一写呀,这就代表一个事物能听懂吧,你一执行它就满足事物的特点了啊,它是这个意思啊,因为它是自动开启的。说到这儿呢,有的同学就说老师这这也不好,因为啥呢?因为你要是这样的话,你像对像刚才你说的,有的时候啊,我我我我希望这个工作单元是两条语句,比方说我刚才是不是举了个例子,它可能有两个update呀,能跟上吗?大家比方说就拿它为例啊,它上面这个有一丢丢绕啊。
02:16
那么假如说呢,我要做一件事情,它需要用到了两条S狗语句,我是不是希望让他们两个合并成一条事物啊,可不是两条是一条事物,但是它默认的这就是一条,这就是一条,我说对了吧,这是不是不太好呀?哎,这不就满足不了我说的他们两个合并成一个事物的意思了吗?啊那所以说这个时候我们就得使用什么事物了呢?显示事物,显示事物啊好,那这个意思是说事物呢,它就具有是不是明显的开启和结束的标记,它这个意思,但是你必须要保证啊,你要是想自己跟它开启和结束这个里边你绝对会用到这个inser update delete这些吧,啊,那你要用到这个了之后啊,那你这这不就跟他冲突了吗?所以有一个前提,你必须干嘛呢?先设置我们的自动提交功能。自动。
03:16
提交功能为是不是禁用啊,我这样说能理解吧,你你要么的话,它本身是开启的,那么你就算把这个事物开启了,就是这啊举个例子,我这是个显示事物,假如说我写了个开启事物的语句,咔咔开了,然后呢,我说这个事物里边包含这俩啊,这个意外先去掉好,然后我这呢再写一句结束事物的语句,能看明白吧,哎,你说诶老师这就是一条事物,但是它本身这个是不是就是一个一个事物了呀,哎,这不对吗?所以你必须先禁用它,这样的话让他俩合起来成为一个事物,这个事情才靠谱,我说的对吧?哎,所以说你要做显示失误,前提必须要先设置这个。那怎么去设置呢?那接下来咱们就说这个事情哈,好看这呃,它这个地方呢,用到了这个set out of commit等于什么呢?哎,零零的话就代表相当于把这个给关掉了哈,那我们可以试一下啊,在这我执行好,哎,然后在这我是不是重新查看一下呀啊,然后执行现在是什么啊,知道意思吧,你得先关了它才行。
04:29
啊,当然这个关闭的话,它只针对当前的事物有效,并不是说你关一次它就永远生效,能明白吧?啊不是说你关了,我下次再开它还是关了。啊,我们没有达到这一点,它是只针对我们当前的会画有效啊,所以说基本上每次你去开启显示事物,是不是都要再去手动的给他设置一下为零啊,啊,它这个意思行吧,那么我们接下来继续,呃,当然很显然我们需要关心的就是这个显示事物到底它的书写步骤了,嗯,那咱们就一起写一下哈,呃,首先步骤一,那应该就叫做开启事物,我说的对吧,开启事物的话,它就直接set out of commit等于零,先写它,另外呢是start transaction这个语句,呃,但是这个语句是注意是可选的,意思是说你这条语句不写也开了,只要你写的它就相当于默认开启事物了,我这样说能理解吧?啊,默认开启了哈,也就是它是必须的,它可以写也可以不写。
05:36
好,这是步骤一,步骤二的话呢,我们再去编写我们事物中的思考语句啊,那你可能有一条语句,也可能有多条再去编写啊,比方说我这个里边有语句一啊,分号语句二啊,能看明白吧?啊第二点可以有多个,也可以只有一个,注意了,这里边的语句我们一般来讲就是指就是指select insert update,还有谁呀,Delete,咱们前面学过的。
06:11
注意听哈,因为这个书上是没有的啊,咱们前面学过的啊,你也没说是吧,就是你的资料上是没有的啊,那么我们前面学过的像create auto drop这个是不是属于DDL语言啊,这个它没有事物之说,明白吧,没有事物之说,咱们所谓的事物里边的这个语句指的是这些。是不是增删改查呀,哎,指的是这些能听懂吧,啊好,那么开始编写,假如说你编写完了之后,我是不是应该结束事物呀,啊,结束事物,那结束事物的话呢,我们有两种结束方式,假如你认为你的这个语句呢,可以全部执行,那我就成功的提交,这一句话叫做提交事务,我们是不是也可以,假如说有意外,我是不是让它回滚呀,哎,这一句话我们把它称为叫做回滚事物,Roll back roll back,回滚。
07:07
能看明白吧,啊是这样的啊,但是在M班思里边呢,我们没有办法演示,没有办法演示什么呢?就是你的语句如果出现异常,我是不是希望让他回滚啊,如果说没有异常,我是不是希望他提交啊,我们没有办法演示这个异常啊,那怎么演示呢?我们是不是后面要学这DBC呀,那个地方可以演示,我们这个里边没有办法模拟,所以说我这要么就跟他提交了,要么就跟他什么了呀,回滚了啊,达不到说根据他的情况去回滚,根据他的情况去提交,达不到这一点。说明白了吧啊,你光单纯的MYSQL是达不到的,你得联合着我们的应用程序来明白意思吧,啊行吧,那接下来我们就试一下呗,好看一眼哈,啊,这个试的话就按照这个步骤来就行了啊,那我们这的话就是来去演示事物的使用步骤啊,比方说我们把刚才咱们这个语句粘过来。
08:07
我们创建一下新开一个吧,呃,换一个库啊,换到咱们T的库可以吧,嗯,那我看看写的对吧?啊,这是插入两句话没问题是吧?嗯。好,执行成功了,好刷新一下。我这个里边应该是多了一个表,叫做account表,有吧,我account的表里边有这么三个字段啊,那这个三个字段的数据我们打开一下,哎,这个是张敏是吧,其实我本来想整郭襄来着,是啊,不对,这是张无忌是吧?嗯,就就这样吧,没问题吧,啊,这个就有了哈,行,那么接下来我们呢,要做一个转账的事情,好那么我们怎么去做嘞,看一下首先第一步是不是开启呀,开启事物怎么写来着?呃,开启事物叫做set auto auto commit等于零,然后呢,我们再去是不是编写事物的使用到的语句啊,啊,有多条语句啊,边写一组,我这样去写吧,啊,一组啊,那当然了,我说了你也可以加上start trans section啊,这个语法是没毛病的,然后编写,那有update,我们的account set balance是。
09:30
他这个吧,等于里边原本的钱是1000,我变成500 where,我们的叫做user nameme,等于张无忌对吧?好,这是一条了,我再编写一条SQL语句,比方说叫做谁嘞,赵敏,好,我们把他的余额改成1500,好编写完事,那接下来第三步我们要干嘛?结束事务,你这儿只能选一个,要么提交,要么回轨吗?这两个都算是结束,假如说我们提交是不是就走它呀,Commit来咱们提交一下哈,看把这个可以选中它一起执行了啊,执行啊,这个应该都成功了吧,看是不是成功了,看我们这个,因为你是正常的成功执行的,所以说我们现在查看我们account表里边的数据,Account大家查看一下变没变呀,变了啊,它这样的一个意思啊。
10:30
啊行,那么回滚的咱们试一下,假如说我再跟大家去变回去,我把张乌机的钱呢,我们改成多少呢?嗯,1000,然后把这个也改成1000,能听懂吧,哎,我要回滚,那么我这的话应该怎么写嘞,Roll back啊感受一下回滚哈,Roll back好,那么现在呢,我也是开启个事物去执行它。好,那么现在呢,这块成功了,是不是成功完成呀,好也可以看一下哈,都没有问题,那好我现在再去查看,你看它变没变到1000,好,我们再看一下回滚就是这个意思。
11:10
能看到了吧,嗯,啥,是不是刚才我们已经把它切换成五百一千五了,我现在是不是希望都变为1000呀,变没变回去啊,没有啊,这不就得了吗?因为我是怎么写的呀,会滚吗?所以说你可以认为在结束事之前,我们这个数据,你可以认为它只是保存到了内存对不对,并没有提交到我的磁盘文件,你真正走了结束事务是不是他才决定你到底是提交到你的磁盘文件还是在撤销,我这样说能理解吧,也就是只有有了结束的标记,他才来决定你到底是撤销还是继续提交到那呃,提交到文件啊,他来决定这个事情,你在没有结束之前,他他只是驻留在内存了,这样说能理解吧。
我来说两句