00:01
好,来下一个呢,我们再来说一下它里面的另外一个属性,我们来看啊,我们来讲一个啊,也是比较头疼的啊,叫做事物的隔离级别,我们叫做isolol,这个东西听说过没有听说过,听说过没有听说过,听说过吧,OK,来这个地方我们能看到事物的隔离级别呢,总共有这么多,你看到没有是吧,其实总共也就四个。这个default有一个默认的嘛,对吧,那么我们自己设置的话呢,也就这么四个,叫做什么read committed read on committed啊,Replay tableable,什么read,还有一个soable,好吧,来直接给你写出来啊,Isolol就是我们的事物的隔离啊,级别啊,啊,Isolation啊,这是传播行为,就是我们的proation啊,写到这吧。好,写到这啊好,那什么是事物的隔离级别,大家知道吧?
01:04
讲数据库的时候肯定讲过这个概念吧,对不对,OK,好,那我们总共有几个隔离级别来着,四三个呀,四个呀,五个几个呀,四个啦,啊这一问你还不确定的是不是哪四个呀么啊,什么什么换读是吧,那是存在的问题啊,那咋那哪叫隔离级别啊啊来听我讲事物的隔离级别,我们在买三数据库里面,注意啊,现在我们就围绕着买S来讲,买S数据库里面呢,它有这个隔离级别,而且它默认的隔离级别是啊,可重复读吗?对吧,也就是那个四吗?还记得吗?每个隔离级别可以通过数字来表示,分别是一二,然后呢,三啊四八了。
02:08
对吧?来分别是什么呢?给你写就是读未提交啊,你英文不认识,我给你写中文啊,英文英文我也写不出来啊,读以提交好,下一个呢可重复读是吧?再下一个呢,串行化想起来了没有,想起来了啊,真想起来假想起来了啊来注意哈,这个东西我们是可以看得到的哈,你看呃,在我们这个数据库里面啊,昨天我还这个看了一下是吧,我看看啊,你把这个鼠标呢,选到这个数据库上面,然后呢,在这个位置呢,你打开这个信息啊好打开这个信息,然后呢,这就是我们当前数据库啊,我的MYSQL的5.7.15这个版本,它里面的话,我们往下翻啊,就能看到一个。
03:05
事物的你看一下啊,事物的isololation是我们的隔离级别呀,叫做re read嘛,不就是我们的可重复读吗?对吧?所以说买circle默认的隔离级别是什么呀?是四,听懂了吗?诶,它是一个四啊,就是我们的课重复读,好吧,那我们既然提到它了,我们还得给大家去好好的去说一说啊,什么叫做独未提交呢?啊,隔离级别嘛,那你最起码得拿两个事物来演示了吧,对不对,好,现在我不给你演示,我给你去讲这个原理就行了啊啥叫做独威提交呢?就是我可以读到别的事我还没有提交的数据。啥意思呢?我跟你讲,我有一个表,表里面呢有一个数,比如说是50好吧,然后呢,有两个事物A跟BA事物呢,把这个50改成了30了啊,但是呢,他这个操作还没有提交,理解吧,就是没有commit,那么我们知道没有commit的数据,最后有可能是被commit,有可能是被robot吧啊但如果说你们的隔离级别是一个读未提交,那B我去读这个数据的时候,他读到的是谁,他读到的是30,因为你们的隔离级别是读未提交,那B就能读到A还没有提交的数据。
04:29
听懂了吗?理解了吧,OK,好,那家大家大家就在想,当B把这个30读回来了,A发现我改错了,他把这个操作回滚了,那么数据库里面的数据是不是还是50啊,但是B拿走了是多少30?这个问题是什么问题啊?哎,对了,张度是吧?啊,所以说你你不要说什么隔离级别,什么脏脏毒,是不是它存在这个问题呀,明白了吧,OK,存在一个脏读,那怎么解决脏读这个问题呢?我们就需要通过读已提交来去解决,来听我讲还是50好,A去把这个数据呢改成了30,但是呢,B再去读的时候注意,如果说A还没有把这个数据做提交的话,B读到是多少五五十。
05:21
能明白吧,B读到的是50,嗯,听明白这个意思了吧,B读到的是50啊,就是你不可能读到A还没有提交了这个30,能理解这个意思吗?所以说呢,在暂时这种情况下来看,我读到的这个数据肯定是没有任何问题的啊,但是这个又存在一个什么问题来着,换读换读啊啊存在什么问题啊,存在一个读问题啊,什么叫做换读啊,就是它存在什么问题啊。
06:00
不可重复读吗什么的,不可重复读啊,那听我讲,我把这个50呢,比如说我去读数据对吧,然后呢,你A把这个50改成了30,好,我去读的时候,因为你没有提交,而我们的隔离级别是读已提交,那我就读不到30,而读到了是50对吧?而读到了是50,但是呢,我刚刚把50读回来以后呢,你迅速的把这个数据又改成了,就是你提交的这个操作了,你改成了30了,那么我B立马再去查一次的时候,发现变成了30,就是两次我读回来的数据是不一致的,能明白吧,两次读回来的数据是不一致的,这个叫做什么操作?这个叫做不可重复读。明白这个意思了吗?这叫做不可重复读啊,就是说它存在一个不可重复读的一个问题,明白了吗?OK,所以说呢,为了解决这个不可重复读呢,我们就要把它改成可重复读。
07:03
理解了吧,什么样的可重复读啊?来听我讲好,A这个里面有个数据50 a对这个50进行操作的时候,他把50改成30的时候,B过来读数据了,他读到的是谁?他谁都读不到,我不让你读,能明白了吧,我不让你读。听懂了吧,也就意味着比如说总共呢,有十条数据,那么他读回去的话呢,可能这条数据我是没有读到的。理解了吧,这条数据我是没有读到的,然后呢啊,B就有什么把这个读回来了,读回来以后呢,B下一次再去读的时候,注意A呢把这个数据给你做了个提交了啊,或者说呢,这么来讲哈,就是给大家去再去演示另外一个问题啊,还是这个你看看哈,啊,我A呢把这个50呢改成了30了,但是呢,B去读的时候能读吗?B读不到任何一条数据,明白了吧,OK,他就回去了,好,但是注意了啊。
08:02
大家听我讲,B再去读的时候啊,比如说另外一个人吧,C把这里面的插入了一条新的数据,插了一条新的数据进来了,但是呢,这个直接就提交了,那么B再去读的时候,是不是就能看到这个新的数据了,对吧,就是相当于我第一次读的时候,我没有读到这个数据,没有读到这个新的数据啊,然后呢,我第二次读的时候,我又读到了这个新的数据了。是吧,那么这个是什么项目。话度。明白吧,这叫做幻读,产生幻觉了吗?刚刚看还没有,怎么我再一看又有了呀,能明白吗?这就是一个幻。听懂了吧,所以说呢,这个不可重复读主要描述的是什么呢?感觉上好像这个不可重复读跟换读也差不多是不是?但是其实他们是有本质区别的,不可重复读主要描述的是修改操作,而换读主要描述的是插入操作,明白了吧,就是我一开始看总共有五条数据,我在看的时候总共有十条数据,就是相当于你产生了幻觉了,对吧,刚刚还有五条,怎么突然就成十条数据了?
09:12
能明白吧?而那个不可重复读是什么呀?我刚刚看这个值是50,我在看的时候它变成了30,这是一个修改操作,所以说呢,这个不可重复读主要是对应的修改操作,而换读主要对应的是叉五操作,明白了吗?好,这个需要给大家解释明白了啊好,那么为了解决这个换读问题,那我怎么办呀?创新法啥叫做创新化呀?创新并行大家知道什么意思吗?都学过吧?什么地方学过电路里面是吧?创新并行好多同学在想啥时候学过的啊,创新并行肯定都学过吧?那么串行化就是什么意思啊?只能是排着队的一个一个去走,我在操作数据库的时候,别人谁都不能操作,这就是我的,等我操作完成以后,你才有资格去操作它。
10:04
但是这个又存在什么问题啊,哎,对了,效率特别低,明白了吧?啊,效率特别低就相当于什么意思呢?举个很不恰当的例子是吧,你上厕所的时候对吧,你把你的单间把门,把你那个小单间是吧?门关了就行了,你非要把整个卫生间的厕所的大门给关了。对吧?啊,这就是这个问题嘛,你想一想,如果说你把整个大门都关了,本来人家还是可以让别人操作的,是不是啊,但是你非要把它加个锁,我就不让你操作,这个效率是不是特别低啊。对不对,哎,所以说呢,大家注意,就是你越想安全,那么效率就越低,听懂了吧,你越想安全,那么相应的效率就会变低,那我们怎么去衡量这个东西呢?就是我既想安全。我又想效率高,怎么办啊?
11:02
其实我们最常用的是哪个呢?我们最常用的读已提交语就可以了,明白了吧,这就可以了,就是虽然说它存在存在什么不可重复读,存在什么换读问题,就是上面的,就比如说读未提交,它其实下面这些问题它都存在的,对不对,诶虽然它存在这些问题,但是这些问题,下面这些问题呢,我们是可以接受的。你来想想,读一提交,只要我读到的数据是正确的就行,对吧,至于两次我读到的数据相同不相同,这个其实我们是能接受的,我就给大家举个例子啊,这个就是让大家帮助你们去理解啊,但其实呢。啊,这个这个不是跟我们数据库之间打交道的啊,像那个淘宝秒杀的时候都见过,没秒杀的时候那价格是不是会低啊,对吧,就是诶我刚刚看的时候,或者说搞活动的时候,我刚刚查询了一件商品,这件商品呢是500块钱,那么正好呢,就赶上了搞活动,然后呢,你再去查询的时候呢,正好这个活动开始了,然后呢,它的这个商品降了,降成了450块钱。
12:09
你两次读到的数据都是不一样的,但是在当时你这个数据的时候,你读到的数据是不是正确的数据啊,肯定是没问题的吧,OK,所以说只要你能读到正确的数据,至于两次你读到的一样不一样,这个我们是能接受的。是吧,你本来刚想买500块钱,我又再去一看450块钱了,对吧,你能接受吗?接受不了啊,啊,那你再等等,可能变成四大环线是吧,啊就能接受了,对吧?这个我们是可以接受的,能理解吧,再一个就是这个换读的这个问题。啊,这个坏毒的这个问题啊,啊就是比如说我去查数据的时候,诶,我第一次我查出来总共有五条数据,对吧,比如说我在淘宝上还是我去搜索一件商品,第一次他给我列出来了五件商品,然后呢,隔了一小会儿呢,我又查了一次,帮我列出来了七个商品,你觉得这个有问题吗?没问题,能接受吗?能接受。
13:06
听,听懂了吧,能接受啊,所以说呢,我们只要能保证你的数据是统一的,你的数据是完整的,是一致的,就是没有任何问题的,所以说呢,这个地方大家要给大家讲的就是我们最常用的,其实就是一个读以提交明白了吧,但是大家要记住啊,买circleq数据库默认的这个隔离级别,它是一个可重复读,听清楚了吗?哎,它是一个可重复读啊好,这个位置的话呢,我们就给它设置为一个叫做read commit,叫做什么都提交明白了吧?OK,这就是我们的事物的一个隔离级别啊,好,给大家再去解释一次,现在都能明白了吗?OK。
我来说两句