00:00
好,下边的话呢,我们来说这个数据库数的问题,那我们在这个transaction下边呢,去新建一个class。哎,Transaction的一个测试,那首先的话呢,我们引入一个实际的问题,这个实际问题的话呢,我们需要借助于咱们写的通用的增删改操作,所以我们去前一天里边找增删改呢,我们是写到这个类里边了,通用的增删改操作,把这个呢,我们拿过来CTRLC一下粘到咱们这个transaction test这里边,Ctrl shift的f ctrl shift的O这个上面呢,我们。嗯,这个没问题了啊,行,保存一下,这个呢,是咱们之前写的这个通用的自删改操作啊,当然这个存删改的时候呢,咱们这下边调的是excu啊调这个呢,没问题,就如果你要对这个返回值没有特殊诉求的话啊,那就写成avoid,如果你要有诉求呢,咱们也可以是不是调另外一个方法,那return excu update对吧,那第也行啊,最后呢,你直接再补一个return一个零,嗯,就是如果说嗯,如果说呢,我们这个在这里边执行啊,要是出现异常了就蹦到这了,处理完异常以后啊,记着给你return个零,如果呢,都没有异常,都是正常的,这块我们就执行完以后呢,告诉我说你到底是,呃,这个影响了几行数据。
01:18
这个影响是一个泛泛的操作了啊,比如说你要是一个update修改操作,你到底修改了几条记录,删除删除了几条记录,诶返回的就是这个int型的,诶这样写也可以,这呢是咱们写的叫version1.0的版本,通用的责任感,那么考虑上事物以后呢,我们要对它呢进行一个优化。啊,那我们这呢,就是优化之前,我们利用增删改,我们做一个实际问题,大家看一看。诶,好,那我们做一个什么事呢?我们看下这个数据库中的表。
02:00
来看下咱们这个test打开,这里边呢,有个表呢叫user table,这表里边呢,我们看一下,其中有两个用户,一个叫AA,一个叫BB,这两个人呢,他的balance呢各是1000,就是余额,现在呢,我们要做个操作,就是AA呢给BB转账100块钱。AA给BB转成100块钱,这呢其实里边呢,涉及到两个update的操作,对一个呢,就是AA的这个update的时候呢,我们把这个对减100,同时对BB呢再加100,那这里边是两个update,那两个update,那这两个update呢,大家想一个事啊。这是一个update,我就写成U1了,这是个update写成U2,我们在操作的时候呢,说他俩呀,得是作为一个整体出现的,什么叫做一个整体出现呢?就是你俩要么都执行,对都执行,那就相当于这个减了100,这个加了100,那就转账成功了。要么呢就都别执行,那就相当于转账失败了,你不能执行一半,说A呢把这个钱扣了,然后BB这块呢还没收着,这个事是不不允许存在的,嗯,这呢其实就是我们现在要说的这个事物的问题,好,那我们先把这个转账的过程呢来描述一下。
03:20
这个是啊用户,呃,咱们是针对于。哎,这个数据表。嗯,叫user table啊来说哎,演示一下这个AA用户给BB用户。嗯,转账哎,100好,这里边呢,涉及到两个操作,第一个啊,Update,我们叫user table set balance,那等于啊,原有的这个balance减去100,然后where啊,这个我们叫user,等于这个是AA了。
04:05
行,这是一个,然后接着。嗯,CTRLC一下。嗯,这个呢是加100。这是BB,嗯,来做这个事儿,那这呢,既然是两个update的操作了,你就需要借用于咱们下边这个通用的一个增热感操作,好,那我们就来写了,嗯,这个首先呢,你写第一个SQL语句。诶,这个我们上面刚才写的这个。嗯,到这CTRLC粘过来啊,这个位置呢,咱们就写成个张鱼符了。然后接着呢,调用咱们下边这个update的操作,把这个SQ呢,SQ一传进去,这个呢就是我们的A。OK,没问题。嗯,这样的啊,后边这个少一个分号。好,这是一个了,然后接着我们再演示第二个啊,CTRLC把这个粘过来,这个是第二个语句,就是我们这个。
05:04
CC。那最后这个我们给他换成一个战略服务。嗯,这个呢是一个SQL2,这是叫BB来保存一下,好,如果呢,你要操作成功了,这个我们在后边呢,给大家写上一句啊叫转账成功,嗯,保存一下,OK,写完了,写完以后呢,这块我们把这个表呢,刷新一下,确认一下,这里边就是他俩各1000,现在我们做一个执行。转账成功好过来看一眼刷新,诶确实呢,转账成功了,就A呢减了100 BB呢加了100啊这是我们说这个理想的情况啊,就是他们成功了,然后这块呢,我再给大家改回去,呃,改成1000保存一下啊刷新这个数据库里边仍然是各自1000,那我们刚才提到了一个点,说我们要保证呢,这两个FD操作呢,得作为一个整体出现,要么都执行,要么都不执行,其实这呢,就是我们所谓的这个事物及事物的处理原则啊,当然这个是我们刚才说的这个生活中的一个描述啊,就是咱们都应该理解这个理啊,那现在的话呢,我们也演示一下,说可能会出现一些问题,比如说我们AA呢,把这个钱转过去了,BB呢没收着,哎中间呢,比如我们模拟一个叫网络的一个就拥堵阻塞,或者网络中的一个异常,诶模拟网络异常,那其实呢,我们就只是让他抛一个异常就完了,比如说我就演示一下十除以零了,这是咱们的一个算数异。
06:35
对,就是模拟网络中异常异常或者的话呢,就是你转账的时候呢,咱们一般都是需要填对方的一个姓名,还有他的一个卡号,对吧,也是他得保证你确实跟那个人得匹配上才行,那有的时候呢,你可能一不小心把人家卡号写错了,然后呢,诶名字对了以后,一看卡号不对,这时候呢,这个钱其实也就打回来了,要不就是你卡号写对了,这个名字写错了,这个时候呢,钱也会给你打回来,其实我们都理解成类似于这里边的这个操作。
07:03
哎,我现在要模拟一个网络异常,那下边呢,我们去执行一下再。OK,这个是咱们自己模拟的这个异常了,对吧?那么这时候我们再来看一下这个数据库中的表,此时呢,会是什么情况呢?是成这样了对吧?这个A呢,我们刚才执行了update操作,这个时候呢还减了100,然后呢,紧接着出了一个异常BB呢,这个操作就没有执行,所以呢,莫名其妙的他们俩的总和呢就少了100块钱。啊,这个事呢,就是不对的啊,那么按照我们实际的情况来讲的话,如果出现这样的问题了,是不是应该把这个操作给它回滚一下啊,哎,保证呢,我们这个AA的这个钱呢,还能再回来,就是相当于你给你朋友转了一笔钱,结果呢,对方还没收着,因为呃一种各种各样的原因吧,是吧?哎,是你写错了呀,还是网络的一个异常啊等等,那这个钱呢,还得再回来,回来以后呢,你再去转还得是这么着,你不能转过去以后呢,你这块钱没了,然后对方还没收着,这个人情搭的有点狠是吧?嗯,那这时候就想钱去哪了,嗯,钱呢,就后台这个支付宝结算的时候呢,发现他多了钱了是吧?哎,都跑到支付宝那块了啊。
08:14
行,那出现这样的问题了,那我们下面呢,来引入咱们要说的这个事物的问题。
我来说两句