00:00
好,那么关于呢,MYSQ呢,如何呢,去设置这个隔离级别,咱们就说清楚了,那么接下来的话呢,我们给大家去演示一下,在这个不同的隔离级别下啊,咱们提到过的这个并发的问题,对吧?那么这个并发问题呢,咱们提到过是不是有脏邪脏毒不可重复毒换毒,是不是这样的一些问题,对吧?啊那这块我们看看呢,诶如何呢去体现啊,当然这里边儿我们要说明一下什么呀,就这个脏血的问题啊,咱们在这个不同的隔离级别下呢,其实都把它给解决了,对吧?啊,那就意味着什么呀,我们要想再现这个脏洗啊,是不可能的了。啊,那最起码呢,你是不是也得选一个叫脏毒,得从这块起,哎脏毒呢,我们可以在线,因为呢,我们在这个read UN committed的这个情况下呢,他就没有解决这个脏毒的问题啊,我们呢可以把它呢呈现出来啊,就是前面呢,我们说的这些呢,其实都是一些理论了,我们下面就可以通过代码呢去做一个演示啊,让大家呢加一个巩固啊加一巩固行,那首先的话呢,我们这块呢,就涉及到了去修改这个隔离级别,都改成叫read UN committed。啊,那么改它之前呢,咱们首先呢,诶这块你得有具体的这个表,我们去演示两个行为对吧,所以首先咱们去创建一个表。
01:08
双写表的话呢,这块我们方便起年呢,就拿这个转账来说了,那这呢,咱们用的这个表呢,叫做account这个表,这个表呢,咱们在这个s point这块呢,诶做了一个说明,哎,那我就用一下s point这个表,那我们回过来。啊,过来以后的话呢,诶同学会看到咱们刚才演示的时候呢,这块呢,是read uncommitted了是吧?诶这个呢,诶为了防止大家呢,这个理解上呢,有一些歧义啊,我就哎果断的就不要这样的一个会话了,然后呢,咱们在这个呃这个会话,这个会话比如我也给关一下吧。诶都关掉啊,咱们就是一个全新的,诶那首先的话呢,咱们先啊做一个登录哎,Root用户是吧,这个相当于咱们是一个全新的啊避免呢,大家以为说诶刚才的这个,呃,绘画呢,是不是影响我们去这个刚才的隔离级别,会不会影响我们这个去创建表啊,这个呢,先把这些呢,我们都抹掉啊,全新的一个方式。啊,首先的话呢,我们进入到这个呃,MYSQ当中啊,咱们把这个表呢,先创建一下啊,那此时呢,我们去use一下,叫S硅谷DB3。
02:03
啊,在这里边是吧,首先呢,我们去收一下这个tables,诶当前这里边呢,是没有咱们的这个account的这个表的,对吧?然后呢,我把它呢再粘啊这个还不是他了,那我们回过来啊,我把这个表呢粘一下啊CTRLC这个表呢,里边呢有个ID,有个name,有个balance啊这个呢是一个主键啊name balance这个呢就表示这个余额的意思,行,那回过来以后啊,这块我们把它删一下。啊粘过来啊走起那就可以了是吧,好,那这样的话呢,我们把这个表呢,就创建好了,创建好这个表以后呢,咱们往这个表里边呢,加两条数据,这个数据的话呢,咱们就加这个数据吧,加哎注意这时候呢,我们把这个主见呢也给大家写上了啊一个是一,一个是二,张三李四,张三呢是100块钱,李四呢是没有钱,好CTRLC一下。啊,这个我们到这儿啊,这个粘过来啊,走起,那这个呢,是不是就执行成功了,咱们这里边的话呢,相当于也没有呢显示的去使用这个事物了,相当于我们这个DML语呢,是不是自成一个事物,因为默认呢,Auto是一个的状态啊,所以这个数据呢,相当于就已经做了这个提交了啊那此时的话呢,我们去select一下from,咱们叫这个account,哎这么着,那这时候你会发现呢,诶张三李四,哎没问题是吧,哎,1000。
03:17
好,这呢是OK的啊,然后的话呢,我们首先呢,去select一下啊叫transaction。啊,这个isolation。啊,这是我们查看啊,是不是叫repeat啊,这是OK的,没问题是吧?好,那么咱们呢,再去啊,我去双击一下,哎,让他呢再去启动一个,呃,绘画啊相当于呢,我们拿这两个绘画呢,就充当两个不同的事物啊,咱们去做这个演示了。嗯,咱们这块呢,先让它连接成功啊,先去做一个登录啊MY。哎杠u root-P啊ABC啊123,注意咱们这人呢,两个不同的绘画呢,诶同学说我们都用这个root用户去登录有没有问题啊,没问题啊,哎都用路的用户登录呢,我们也能够体现两个不同的这个会话,那进而呢,我们都去请求的话呢,就是两个不同的事物了。
04:05
啊,这就进来了是吧,那进来以后的话呢,我们是不是要做个修改啊我呃这块呢,咱们为了方便用哈,咱后边呢,诶就是查的时候呢,我就提前呢,先把这个呢先使用一下是吧,好接下来我们去set一下叫做。Session。嗯,先查看一下吧。嗯,这个transaction。Isolation。嗯,转set了是不是应该是select是吧。好,那么这时候呢,是不是叫没问题,好,接下来我们去一下啊,叫session。啊,这个transaction。啊,等于。诶这块呢,我们改成了叫RA,注意是一个中华线啊安。诶,Committed啊,小心一点写没问题啊,就设置成功了,设置成功以后的话,你再去查看下你当前的这个绘画的这个,呃,这个隔离级别是不是叫read UN committed没问题是吧?好,然后接下来的话呢,我把它呢,诶做一个复制,然后回到我们这个150的这个位置上,我们再粘过来,诶咱们走起,然后呢,我们再去查看一下当前的隔离级别是不是也叫read UN committee了,那这时候呢,就两个不同的这个绘画为代表的就两个不同的事物啊,为了方便大家去理解呢,我这块呢,也做个重名,这个咱们叫做这个看,比如说呃,事物一。
05:27
啊,然后这个的话呢,我们叫做十五二。哎,数一数二好,那这时候呢,这两个事物呢,是不是都叫做read committed read committed是吧,然后呢,这时候我们创建了这个表了,哎,你去做一个查看吧,哎,Select from account。哎,这个是没问题的啊,我们把这个复制一下。哎,回到我们这个层面,那我们站过来,诶走起啊,是不是也没有问题啊,哎,1000好啊,这个呢,还是我们说的隐食事物嘛,相当于这时候呢,这个事物呢,查询完以后呢,也本身呢就结束了啊好,那下边的话呢,我们就开启这个所谓的新的这个事物了,开启这个新的事物的话呢,我是不是用这个begin啊,方便一点是吧?诶你也可以用呢,叫start transaction啊也OK,好,我这块呢,Begin开启了一个事物,然后的话呢,我去做一个update的操作。
06:15
哎,我去update一个account,然后一下这个balance呢,等于原有的balance。哎减去哎加上个吧,哎加上个100是吧,哎说V尔呢,ID等于一相当于呢,我们给这个ID唯一的这个账户呢,是不是加了100块钱,好我们走起,诶我是不是就操作完了,注意我这时候操作完的话呢,我们此时不会去自动提交数据的,因为我们在一个事务当中了。对吧,诶相当一个事物呢,没有结束,那这个数据的话呢,我们相当于是没有提交,你在没有提交的情况下呢,我们看看另外一个事物呢,能不能把它读出来,诶我就直接呢这样写了啊走起好大家看。此时的话呢,我们这个书二呢,把这个张三这个200块钱呢,就给读出来了啊,诶你看这就是我们说的这个脏毒,什么叫脏读呢?就是读取到了,哎相当于我们这个事二啊,读取到了这个事物一这个修改这个数据,但是这个数据的话,你注意它是没有提交的啊,未提交的这个数据啊,他就诶你给读出来了,那这就是一个脏数据。
07:12
啊,这个脏数据啊,那就意味着如果啊,此时你看我们这个,哎十五一,因为我这个数据我写完之后呢,我是临时的数据啊,我临时的我是不是就可以回滚啊,那你看我们回滚一下。啊又回滚了,相当于呢,这时候我们再去查看,诶做去再去做这个,诶select查看的话呢,是不是你这呢,就是回滚到100了,但是你这种呢,相当于查询到了一个是不是临时且无效的一个数据啊。啊,这个呢,就相当于是一个脏度。啊,这叫脏读的问题,哎,大家呢,去体会一下啊,哎,就这样个场景,行,呃,这个呢,就叫做这个脏读了啊,有同学感觉说老师这个理解上稍微差点意思啊,我再给大家说一个,这个脏读在实际操作当中呢,比较严重的一个问题啊,比较严重的问题,好我这块来说啊,呃,目前呢,我们先要确认一下,咱们这个表中,就是这个瓷盘当中,到底这个数据呢,是张三还是李四啊,诶不是张三李四呢,到底是多少钱啊,诶注意这时候呢,其实就是100和零啊,诶你看这是我们做了一个回滚了。
08:09
哎,相当于你这个写的都不算数了啊,咱本身磁盘当中不就是1000嘛,啊你在这块呢,其实呃,此时呢,你要再去查看的话呢,其实还是1000,咱们这个目前磁盘中就还是1000。啊好,那我们再给大家演示另外的一个,这个也是个脏毒,但是这个现象的话呢,就会我们更难接受一些啊。好,大家看,嗯,首先的话呢,我们确认一下这两个都是这叫读未提交是吧,然后呢,我们通过这个呢,是不是begin一下,哎,Begin相当于我们把这个事物呢,就给它,哎开启了,哎然后呢,咱们这个张三呀,想给这个李四啊转账100块钱吧,哎,张三给李四转账100块钱,那此时的话呢,我们是不是就要做两个这个updated的这个操作了。Update是吧,啊update一下叫account,然后呢set一下。Balance等于这个。Balance减去。啊100啊说VR这个ID呢,等于一啊走起,然后呢再来一条。
09:06
是不是加上100是吧?呃,然后这个呢时候这个ID呢,是不是等于二啊,诶走起好,那这时候我们如果呢,去做一个selecting from一下我们这个counter,这个呢,是在你当前自己的一个绘画当中,你这时候看到呢,肯定是不是把这个钱就给转过去了是吧?注意这个时候的话呢,我们也没有提交,也没有回滚,相当于当前这个事故呢,还没有结束,在没有结束的情况下,诶我们现在呢,在另外一个会话当中。确保呢,我们是read UN committed,然后呢,这块我们也去比begin一下,相当于呢,你是不是也开启了一个所谓的事务了。对吧,哎,开启这个事物了,开启这个事物的话呢,首先啊这块我们做一个这个查询。啊诶注意你看这是我们select的from一下,这个叫哎account,诶我查看了一下,哎这块呢,你看你是不是查到零和100,这跟我们刚才说的一样,这实际上你就已经是这个脏读了,对吧,人家这块也没提交,也没回滚,你把这个数据给读到了,这是不。就是藏毒是吧,好,那这块呢,这个12呢,就可能会说,哎呀这个怎么张三把这个钱会转给我了呢,我就不想要啊,我再给他转回去吧,诶这时候呢,这个12呢,相当于是把这个李四这个钱呢,相当于他想转回去,那我们就做一个update了啊,这个account是吧,哎,然后呢,这个set。
10:16
Balance等于。Balance是不是,诶这个先行先减100啊二什么呀。啊,ID等于二是不是相当于呢,这个李四呢,把这100块钱先减了,然后呢,再给张三加是吧,先执行这一个update,来,我们走起。诶大家注意看,这个时候的话呢,我们这个操作呢,就给卡到这儿了,这个我们现在先用一个卡这个词啊,诶为什么在这块不动了呢?不是因为咱们现在这个连接呢,出现问题了,或者卖SQ服务器呢,现在忙没没没啥忙的,这咱自己呢开的这样的一个虚拟机是吧?诶就这么两个会话啊呃,那什么原因造成的话呢?诶就是由于啊这块呢,我们这个事物呢,现在占用着咱们这个表中的这个数据呢。啊,因为你现在占用呢,它其实相当于是加锁了,所以这块呢,哎,你就得是做这个等待。
11:03
啊,就得是做这个等待行了啊,在这块你就先等着吧,然后我们这块呢,这个事物的话呢,他啊就想结束了啊结束你注意我这时呢,用的不是这个commit啊呃,这个张三呢给李四呢转100块钱,他转完以后呢,他后悔了,哎注意你这个事物呢,还没有结束呢,所以我们可以做这个roll back,好,我们就roll back了。我1ROLL back你注意啊,相当于我们这个张三给李四转钱,这个事儿呢,就给回滚回去了,按照我们这个事物的理解呢,是不是我张三现在就还是100,李四呢就是零是吧?诶但是你回到这块来讲,这个呢,15他不知道啊,你看这时候呢,他是不是就执行结束了,因为你刚才入back了啊,然后呢,他接着呢,还想着说,诶我再把这个啊加上100啊这个把人家这个钱呢,再给了人家这个。哎,是不是李,呃这个张三是吧,哎,你再把这个改成个一了,哎来走七啊整完了啊转完以后的话,你说哎呀,你看我这块呢,哎,这个张三呢是零,李四呢是100,我这块呢就是减了100,这个呢加了100,完事了,完事以后呢,你是不是来这个commit。
12:01
走起了是吧,哎,你觉得说挺好是吧,把钱呢给人家还回去了,然后呢,你这时候你再去起来清你看一下。乱套了。是吧,哎,你这是200,这个是负100,哎我们这块呢。哎,走起是不是也是这样个情况啊,因为咱们是不是都结束了啊,他俩都一样,哎,200负100,那相当于呢,这俩的和呢,是不是成了100块钱了。啊,这俩和呢,倒是呃是这个100块钱,因为我们这个本身呢,他俩合就是100,但是呢,这时候呢,我们这个张三变成200,李四变成这个负100了。这是跟我们一开始理解的是不是就不太一致了?啊,所以这呢,其实里边也会涉及到我们这个叫诶这个叫诶脏毒的问题啊,那其实呢,我们说这个脏毒的问题啊,实际上在我们实际数据库开发当中是一定要避免的,就是相当于是什么一个呃感性的理解啊,我们这个事物的话呢,现在正在改,人家还没有去提交这个事物,只是临时写这个数据,你另外的一个这个事务的就把这个临时的数据给读到了,这个是不合适的。咱说的这个夸张一点啊,对,这个呢,是人家这个人的房间,人家进去的时候呢,穿着衣服呢,啊衣冠都挺整齐的,进去以后呢,他可能这个换衣服啊干啥的,这个就就就是吧,不可描述的一些事情了,然后出来以后呢,也是穿着衣服的,哎,你在这个人家在家的这个过程当中,你实际实际上是不能见的,你这块呢,诶相当于是看见了是吧,这就不合适了,这个脏毒啊不对。
13:21
我们把这个事儿呢,先说清楚。
我来说两句