00:00
好,那么这个脏毒的问题啊,咱们就给大家演示清楚了,那下边的话呢,我们去演示一下,在这个叫read committee的这个情况下呢,说这个脏毒呢,给解决了,对吧?艾瑞的commit这个情况下呢,脏毒就给解决了,然后呢,它是不是就有这个叫不可重复读的问题,那我们来看一看这个脏毒和不可重复读我们该呢如何呢去演示行,那这块呢,咱们这个为了方便啊,咱们把这个表中的数据啊,咱们给他呢,恢复一下这个一开始的这个状态啊,所以首先呢,诶,我是在这个事物一里边来操作。操作的啊,这个叫叫TNK这个table。哎,咱们把这个呢,Account咱们给它呢清一下啊,清完以后的话呢,咱们把这个数据呢,再给它恢复成张三呢是100,李四呢是有这个零,哎咱们再用一下刚开始呢提到的这个,呃,添加这个数据的这个情况来CTRLC一下啊好回过来这块我们做一个这个诶粘贴走起啊,那这时候呢,大家可能会担心说老师你现在这个呃,当前这个隔离级别呢,会不会影响我们这个操作呢,另外的事物中去看啊,诶其实没事儿啊,我们这时候呢,也没写这个begin,也没写这个start transaction,那就意味着我们这个隐私呢,相于就是一个提交了啊,这个提交的话呢,我们这块看到肯定也是一个正常的,你比如说那就是就相当于是我们刚才添加这个情况啊,你看S。
01:12
没有问题的是吧,好,那么这块呢,在我们这个事物一里边,咱们也去做这个select星,去查看一下是不是也是这个张三100李四零,好,这个就相当于恢复成我们最初的这个状态了,然后接下来的话呢,咱们把这个事物的隔离级别啊,都改一下啊,咱们set一下这个叫session。3A。把这个拿掉啊,Session transaction啊,这个叫isolation。啊,这个呢,大家稍微注意一下,就这个session的话呢,你别给他省,省了以后的话呢,这个会出现一些问题啊,这个呢,就是global啊还是session啊,这个你想指定什么级别的,就一定给他这个单词呢加上。啊,我们呢,给它改成一个呢,叫做read committed。哎,这样个情况没问题,然后呢,把这个操作呢,我们再去复制一下,在我们的第二个事物当中也做这样的一个设置。
02:00
诶,这就可以了,相当于我们当前这两个绘画的这个隔离级别都是一样的,叫read committee的,那么在这个情况下啊,我们下边呢,咱们下边呢,去做这样一个演示,嗯,那么都是这个,呃,1000是吧,咱们在这里边吧,比如说咱们先这样一下啊,咱去比begin一下,我呢去select,相当于我这个事物已经开启了selecting from一下这个count,咱们去查看一下,那么这时候呢,在我们当前这个事物当中,张三是一,李四是不是零没问题,好,然后在我们这个情况当中呢,咱们开一个begin。相当于我也开了一个事物,然后的话呢,我们去做一个up啊up呢叫account,然后set一下balance,等于哎balance。哎,Balance是不是减去,比如咱们减一个50吧,来说where一下这个ID呢,等于一相当于呢,我们给这个一的这个ID账户呢,他的钱呢,减了50块钱是吧?哎,我们执行一下。执行完以后的话呢,我们这时候呢,去做一个这个select星,诶from一下我们这个叫a count啊,这是我们看一下此时的话呢,你看这个张三呢,变成50了啊,这个呢还是零没问题是吧?诶注意我们此时呢,开启15之后呢,这个语句跟这个语句都还是在一个事物当中的,诶我们针对当前这个事物内部呢,自己修改了没有提交,也没回滚,然后呢,我们再看这个数二啊,此时呢,我们再去做一个查询。
03:18
好,大家看此时的话呢,张三还是100啊,那相当于呢,就是我们这个十五一里边呢,你写的这个数据呢,是临时的啊,那这时候我们在这个里边呢,是不是就没有查看到你这个临时的数据,而是我们相当于磁盘中呢,诶还目前存放的还是那个100的这个数据。没有问题是吧?啊这个呢,就相当于我们避免了脏毒了啊,咱们那会儿呢,如果是在瑞德安committee的下这个呢,就能看到50了是吧?啊这是一个点啊,我们相当于把这个事呢,就给诶证明清楚了,然后继续啊继续,然后呢,我们这个事物一的话呢,我不是已经修改完了,哎,我这会呢就做了一个commit。这是不是叫提交啊,好,我提交了,那提交以后的话呢,你去做一个这个select,那肯定还是500,那我们这时提交的话呢,相当于把这个数据呢就给他,呃相当于你理解为呢,就是刷盘到真正咱们这个磁盘上了,让后回过来注意咱们这个时候呢,你这个事物二里边的这个比例开始的时候,你这个事物事物还没结束吧。
04:14
是没有结束对吧,哎,我这是select select我是不没结束呢,这时候你看我再去select一下。大家你看哎哟,诶很诡异啊,我这个事故还没结束的时候呢,我竟然两次查询当中发现这个张三的这个钱呢,是不是就不一样了,诶这个呢,就是我们理解的叫不可重复读啊,因为我们读了两次重复的这个SQL语句,但是呢,结果不一样了,这叫不可重复读,原因呢,就在于我们另外一个事物,当我这个事物。当我这个时候呢,在查看的过程当中。是吧,我这个事没结束哈,然后呢,另外一个事物呢,对我们这里边这个数据啊,做了一个修改,你还提交了,然后我们这时候再查的时候呢,发现这个数据呢,是修改以后的了,诶这个呢就叫做不可重复度。啊,就是这样一个场景。啊,就说清楚了。
05:01
OK吧,好OK啊行,那这个情况说清楚以后啊,咱们在这块呢,咱们也做一个这个commit吧,咱们把当前这个事物呢,相当于给提交了。那那提交呢,现在我们真实的这个表当中存储的实际上就是500对吧?好,这个看一眼啊,然后回过来的话呢,那这个就不用看了,你都提交了,这个就是50500,好咱们呢,就在当前这个张三是50,李四是零的情况下呢,咱们继续的去演示下一个场景,下一个场景的话呢,是不是叫可重复读是吧,就我们所谓这个隔离级别啊。哎,可重复这个度。性,那么可重复读里边呢,是不是就把这个脏读,这个不可重复读呢,是不是两个问题呢,就都给解决掉了呀?好那下边呢,我们看看在可重复读的这个场景下呢,如何呢,去呈现一下这个,诶它不可重复读这个事儿呢,给解决掉的问题,好那下面下面的话呢,我们就重新呢,是不是再去设置一下这个叫。Session。Transaction。Isolation。
06:00
哎,等于,哎,我们那叫repeatable。哎,Repeat,注意还是这个中华线啊,Read。哎,这样好没问题,然后接下来我们把这个呢,再哎复制一下,哎,在我们这个第二个这个事物这一块呢,我们粘过来啊,我们走起是吧,哎可以了,像这块你也可以做个查看啊,Select这个我们就两个艾符了啊transaction。OL。好,这个呢叫repeatable read啊然后我们同样的呢,哎,你要想查看一下的话呢,你就回到这个十物一这块呢,哎,稍微的眼哎露一眼哎没有问题是吧?呃,那么在我们这个张三啊是50,李四呢是零,这个目前呢,这个磁盘当中就是这样的数据,我们去演示一下呢,刚才提到的这个,呃,可重复读了啊嗯,那这块呢,我们是不是先来这个事物二这块啊,咱们做一个。Begin。开启是吧,此时的话呢,我们去select星from一下这个account。
07:02
哎,此时的话呢,张三是50,李四呢是零没问题是吧?好,然后再回过来,然后呢,这块呢,我们也去比begin一下,开启一个失误了,然后呢,我们,诶这个你愿意查呢,我们也查一下啊呃,喜来听。Pro一下这个account,哎,500是吧,然后呢,我们做一个update说这个account,嗯,然后呢一下balance呢,等于balance减去一个,减去一个多少啊。咱们减个十吧,啊说V2ID等于一,相当于呢,给我们这个张三呢,减了十块钱啊,然后呢,我们走起。没问题是吧,好,那么这个时候的话呢,我们回过来再看一下,这个时候我们在做这个select克星是不是还是50啊,诶相当于呢,我们在这个可重复读里面呢,就避免了一个脏毒的问题啊,那你这块呢,其实查看的时候呢,是不是已经变成了一个40了,但是我们这块呢,没有查出来40相当于脏毒的避免了,好那么接着的话呢,我们在这里边呢,咱们做了一个叫commit,嗯。我们这是不是叫这个commit了,诶我提交了,提交以后的话呢,你这块呢,去查看,其实还是40,只不过呢,诶commit之前跟之后的区别就在于commit之前呢,这属于你内存级别的,Commit之后的话呢,相当于我们就会有个呃,相当一个刷新到这个磁盘中的一个行为,对吧?诶这样的好,那么回过来大家注意。
08:16
此时的话呢,我们十五一已经结束了啊,而我这个十五二呢,我还是比begin呢,还没有结束呢,那么此时呢,你看我要是谁来进count还是50,那就意味着我们解决了这个可重复读呃,这个不可重复读的问题了,要变成40的话,那就跟上个隔离级别一样了,是吧,来,走起。大家看此时是不是还是50?哎,那就意味着咱们还在当前的这个事物当中,哎,我在重复去读的时候呢,是可以重复读的,因为呢,值还都是50。诶就这样个场景,好,那下边呢,我们做一个这个commit,然后的话呢,Commit完了以后,意味着你当前这个事物结束了,诶我们在时候呢,诶不管你是begin也好,还是你直接就写select也好,这就相当于一个你要没写begin select,默认相当于它自己就独立是一个事物了,诶那这时候我们去做个查询,诶你看其实这块发现它已经变成40了。
09:05
啊,但是我们上边呢,在你这个事务期间。哎,在你这个begin和这个commit期间,你两次呢,读的相同的词口语句,我们查询出来的结果呢,是一样的啊,这个呢就叫做可重复读,相当于呢,哎,Repeat就解决了这个不可重复读的这样一个问题。哎,说清楚了是吧。
我来说两句