00:00
来,CTRLC。好,那通过刚才这个演示呢,这是咱们呃叫未考虑呃数据库事务情况下的一个转账操作啊。诶,转账操作了,行,这个我就写到下边吧,下边呢是咱们要考虑输入事务的一个转账操作。嗯,OK,那这块呢,我们就把刚才这个所谓的通用的增删改操作呢,我们就拿过来了,呃,这个我们再把它往前移一下啊,那拿过来以后呢,就是我们要做个修改,改成一个叫2.0版本,这个呢是我们考虑上事物了,那这个怎么改呢?其实非常简单啊,比原来那个反而再简单了,我们直接呢,从外边给你传进来一个连接。那这个链接呢,你就不要在里边呢去造了,把这个事呢给它干掉。
01:05
嗯,然后最后呢,你在关资源的时候呢,既然你从外边传进来的,一定要注意这个连接是不是也不要给人家关了呀,诶,那你什么时候造的,你在统一的最后呢,你进行关闭,你外边传进来的,你也不要给人家关,这一定要小心啊,不要关,然后这个呢,就改成我们的第一步啊,第二步第三步第四步好改完了。就是其实这比我们第一种方式呢更简单了,那这个写完以后呢,我们说下边呢,咱们来考虑一下,诶怎么呢,把上边这个转账操作呢,给它改正确来这个我们还是来测试刚才这个叫I update的操作,这呢我们是使用上这个叫transaction。诶,或者有时候这个产塞你要写的简单一点,我们也可以这样写TX,嗯,咱们呢,要进行一个转账操作,还把这个事呢,咱们给他拿过来CTRLC。拿回来了,那这个时候拿操作咱们调的就得是这个方法了,所以提前呢,我们把这个连接呢,获取上该一个connection。
02:10
嗯,CTRL1把异常呢,先暂时抛一下,再CTRL1得到一个连接好,然后呢,这时候我们把这个连接呢,给人家传进来,那相当于这时候调的是咱们下边的这个方法了。嗯,就是这个通用的这个方式二了啊啊,这个第二个版本了,那那这个网络异常,这个可能会有,这个咱们暂时呢也先注释一下啊,然后接着呢,再去操作第二个update的时候呢,我们再把这个链接传进去,这呢你要是正常执行了,就要转账成功,最后呢,关闭资源,这个资源呢,仅仅有我们这个链接,哎这个呢都没有啊,因为你里边那个prepare的statement你自己关啊,这个咱们自己,你自己在里边造的,你自己关,你不是在里边造的,你也不要给我关。啊,这是一个很正常的一个行为,好这个呢,我们就写完了,写完以后呢,因为涉及到资源关闭了,正常我们也不要这样去写。
03:03
哎,这块我们把这个呢先报一下来,做一个surround位置check开始啊,这个呢干掉。这个先等一个no。诶放那里把它呢扔进去来保存一下,好,那这时我们捋一下啊,此时呢,我们做到的事呢,就是保证,诶这个连接呢,我们在外边获取到以后,你先做一个编码操作,诶这是一个减钱啊,剪完以后的话呢,我们再执行第二个操作,然后最后呢,我们把这个资源关掉。如果你要不出现异常的时候呢,这没啥事,都还挺好,结果关闭,你在关闭的时候是不是自动的数据会做一个提交啊。对,也会一个提交,但是呢,这块只是我们满足其中一点了哈,那要万一要是怎么着呢。我们这个时候呢,还有一个点没有满足,你只是把连接呢给它串起来了,避免我们执行完以后呢,连接关掉,还有一个就是我们默认情况下呢,这个DML操作呀,他是不是就是会提交这个事,咱们还是没拒绝呢,是吧,所以我们需要在获取连接以后啊,这个大家呢,还得再做一个事儿,而且这个事非常重要,一定要做,就是设置我们是不是取呃不能自动提交二那叫取消。
04:16
来数据的,哎,自动提交功能,哎,那这个拿着链接,哎,咱们在数据库里边写法呢,是set auto commit等于false,那就是我们这样写的,这是数据库的一种写法,那放到咱们这块呢,你就是用方法来调的,就是连接点一个set auto commit来改成一个false。哎,Set auto commit等于false,那咱们这也可以去验证一下,你看它默认情况下呢,是不是一个处啊,那就是get auto commit呗,哎,这个呢,如果是个处,那就说明它默认情况下呢,就是自动提交的,咱们呢给它等于false了,那就不让它自动提交,不让它自动提交连接还是一个,这个时候呢,你操作完这个update以后,他确实这个数据呢,此时就没有提交。
05:02
然后呢,你再去执行,哎,转账成功了,到这个时候成功以后,我们是不是再把这个数据数据呢提交一下,那这时候我们再拿着这个连接点,哎,它有一个呢,就叫做抗密的操作。那这呢,我们就相当于把这个数据呢给提交了,那就相当于数据库里边真的就把这两个转账就成功了,那么也有可能呢,我们在执行到一半的时候呢,出现异常了,这个异常我们一会打开以后,真要出异常了,直接就蹦到catch这了吧,那蹦到cash这块呢,我们需要做的事就是回滚数据吧,诶那我们这块呢,拿连接点啊叫roll back,诶这个方法名跟咱们原来写的那个操作呢是一样的啊这个呢,本身有异常,我们再进行一个拆开。这叫回滚数据,所以我们这呢做了三个主要的事,第一个取消数据的自动提交,当你都执行完以后呢,我们再去提交数据,中间要出现异常了,我们做一个回滚操作保存,是不是就这样就可以了,诶此时呢,我们就能保证你这两个操作要么都执行,都执行以后呢,我们就做了个提交,数据呢就被保存下来了,要么呢,执行到一半出现异常了,我们就回滚啊,让你之前已经执行的操作呢,也回滚到最初状态。
06:14
啊,就能保证我们这个食物的处理原则了,好这个时候我们把这个色要呢先打开。哎,打开我们这个test里边啊,User table,诶目前呢,他俩呢都是1000块钱,这个异常呢没有,那就是转账能成功的情况测试。哎,转账成功了,这个处呢,是咱们写的这个,那就说明他默认情况下呢,是不是确实提交了,对,所以咱们才改成是个for啊行,这个呢了解一下就行,那既然转账成功了,我们刷新一下,呃,确实转账成功了。好,那这块咱们再给他复原一下,还是1000还是1000保存一下刷新这个保存呢,类似于我们提交一样啊,那这块呢,就是数据库里边呢,现在他俩就是各自1000块钱,现在呢,我们来模拟一下这个网络的异常情况。
07:03
好,出现异常的情况呢,我们相当于转账呢,应该是让他失败的,我们再跑OK。哎,真正是咱们让他报的一个初零的对吧,诶这个这个还是我们上面这个这个问题啊,然后这块我再过来,此时呢,要刷新是不是应该还都各自以前。啊,这些一看没问题,哎,其实呢,这时候呢,就是把我们已经做的这个操作呢,给他做了一个回滚操作,哎,这时候就能保证我们整个这个操作呢,相当于是满足这个事物的特点了。啊,那么相当于总结一下啊,如果我们考虑上失误以后,怎么去做这个事儿呢?相当于我们需要把咱们之前写的一个增删改,包括查询都可以进行一个升级,升级的效果呢,就是这个连接呢,不要在里边去创建了,而是我们通过参数的方式传进来,因为有可能我们一个事物啊,是由多个DML操作构成的,我们得保证这几个DML操作呢,作为一个整体出现,要么都做。啊,要么都不做啊,那这时候呢,我们就必须呢,拿一条线呢,给它都穿起来,这个所谓的一条线呢,就是我们这个连接这个里边呢,你有多个DL操作,诶然后呢,这是只是连接的问题,同时还保证呢,我们一上来的时候呢,先s auto commit等于false一下,诶保证你这里边默认的这几个呢,都先别提交数据呢,整个都执行完了,我们再提交一下。
08:21
哎,这是我们事物处理的一个原则,这个大家需要用自己的话呢,能给大家表述清楚就可以了。
我来说两句