00:00
好吧,那在试这个的时候,因为用到了这个多个事物,所以呢,我们就不要在这个地方去演示了,注意接下来的演示我不是通过这个图形用户界面词不要的,那我们通过的是谁啊,是命令行啊,我们通过命令行的方式啊呃,为了保证我们前面的这个东西呢,不影响啊,就是我我也不知道之前我设置过什么隔离级别,那所以说我把服务重启一下,MYSQL0815好先重新取一下。好,然后重新启动了之后,现在呢,咱们去演示一下隔离级别啊,在这呢,我们去连上my circlel-you,还记得怎么连对吧?好,这个就相当于是不是一个连接呀,那进来了之后呢,那么大家去看啊,我们首先查看一下我们当前默认的隔离级别是多少,怎么去查看呢?通过的命令是select后面加上一个变量名啊,叫做isx啊,Isolation啊,TX啊ISA好了,然后我们看一下,那当前默认的隔离级别呢,就是刚才我们PPT中写到的是不是repeatable read呀,那么我希望呢,把这个隔离级别设置成最低的,只有设置成最低的的话,那么才会去实现什么呢?这个地方写到了脏读不可重复读,换读是不是都会出现呀?啊,所以呢,我先设置成最低的,那怎么去设置呢?通过的是set sectionction transaction as the。
01:42
As the nation level比较长,你不用去记,现在哈,这个叫做read and commit的,是这样写吧,好看一眼啊,也就是是不是把隔离级别设置成这种最低的呀?啊,看是不是read啊,可米体的跟这边是一致的,没有问题吧?啊,我们先设置成它,好注意看哈,瞪大眼睛了,那么现在呢,我们再去查看当前的隔离级别好改没改了。
02:11
是不是已然改了对吧?好,那么改了之后呢,接下来我要做一件事情啊,我use子一下我的探的库哈,我们看一下这个test库里边,我记得刚才有一张表,是不是叫做account表呀,啊呃,这个表的话,呃,这个因为里边有两两个中文的这样的一个用户名,它是变成这样了啊,没事啊,然后我们把这个字符集改一下就行了啊好,然后再去查看,没问题吧,啊行,那么接下来呢,我们开启事物,做一件事情,怎么开启事物了,Set out of commit等于零,能看到吧,Start transaction,刚才说了是不是可以不用写呀,那我就是一个不用写的就行了,好,那么不写,我现在比方说做一个修改,那就是update我的account,呃,Set我们的username可以吧?啊,比方说我们把username改成这啊,Where,我们的ID等于25号,能看明白吧?哎,我就做这样的一件事情。
03:11
回下车,它是不是也提示一行受影响呀,但是我结束了吗?没有结束,我是不是没有加commit和roll back呀,我们没有结束哈,没有结束,也就是现在这个事物开启了,他也没有自动提交,对不对啊,没有自动提交,所以没有结束,我现在呢,再开一个链接演示另外的一个事物,我换一个大家喜欢的颜色吧,绿色。对吧,嗯,行,这样的话大家就能分开了,是不是好,那么在这呢,同样我们也是先把这个隔离级别改一下,因为它默认的隔离级别肯定还是谁呀,还是谁圈A谁T圈ATX圈A圈A是吧?嗯,TX asl啊,默认的隔离级别是不是还是那个repeat和read呀,那所以说我们还是set section trans section ASA level啊,把它改成read and committed写对了吧?啊,行了,然后呢,我们再去查看啊,已经改过来了,同样呢,我们又指一下我们的test库,然后呢,我们再去set一下auto commit等于零,是不是开一个新事物啊,在这个新事物里面,我们呢,也是访问的。
04:42
成和表能看明白吧,这不就模拟两个事物吗?我现在去查看,大家去看一下哈,啊,当然我把那个name字,也就是把字符集是不是改一下呀,啊,再查看一下哈,大家看一下我现在这个我这个事物是不是已然开启了呀,赛的都可米等于零,没问题吧,那这次事物的执行过程中,我们去查看尔康的表的数据,你会发现他已然把张无忌更改为谁了状案了,但实际上人家提交吗?提交了吗?没有,所以说你读到的这个数据我们就成为是脏数据,是不是成为数据的脏族啊,啊好,你比如说人家呀,万一呢,Roll back嘞,是不是有可能roll back,那回滚了,你再去查看是不是又变成张无忌了,而这种现象是不是也成为叫做什么现象,不可重复读和换读,对不对啊,是不是也可以量成了啊,所以说我们在呃,A committee的这种隔离。
05:42
级别下很变大了,说在read and committee的这种级别下,你会发现刚才说到的这三种现象是不是都可能会出现呀?啊都可能出现好了,那么我们接下来继续,那么我现在呢,要给它设置成什么隔离级别呢?啊,第二个隔离级别啊,那这个第二个隔离级别呢,叫做read committed。
06:08
对吧,叫做读已提交,刚才是不是叫做读未提交呀啊,我这个叫做读已提交,注意看哈,那么因为现在的数据应该还是张无忌和赵敏,我说的对吧啊,那么我现在重新开启失误,所以这一块大家一定要注意力集中了啊。好,那么我重新开启事物,然后呢,我这个地方呢,再做一个更改啊John,因为刚才是不是没改过来啊,好没问题吧,同样我没有结束,我没有结束,哎对,在这个绿色的这个框框里边,我们在怎么样,你也得先设置你的隔离级别吧,哎,改成读已提交我说的对吧?哎,然后呢,我们开启事物对吧?好,我们去查看,注意看你觉得呢,他查的数据应该是,哎大家看一下这个的话,应该是应该是张无忌是吧?应该是张无忌,哎这个怎么回事。
07:16
他应该是张无忌,我看看哈,他刚才应该是没有提交上吧,我的这个,嗯,对,因为我这个更改的话,应该是没有生效,我这个select的型号from account,这个完事是没有加提交呀,啊,所以我这个还是在刚才的那种级别下做的,能看明白吧,啊行,再来一遍啊,为了怕这个跟大家去混淆,咱们再来一遍,然后我这儿呢,先提交了来看,先提交了之后,我们现在查看一下我当前的隔离级别,当前的隔离级别的话,应该是asation是read committee的吧,好,然后呢,我再看一下我现在的隔离级别跑哪去了,这是不是也是read committee的呀?好,现在是正确的啊,我们再来一遍,因为刚才的话我没有提交,那重新来的话就应该是set auto commit等于零,对不对,然后呢,我做一个更改。
08:16
啊,Update,我这次换一下,为了他混淆,因为我也不知道里边数据都是谁的对不对,那咱换一下,这里边没有叫张飞的吧,是不是好回一下车,再看我这块是不是没有结束呀,哎,然后我再set out of commit等于零对不对,然后我再来一个是不是slap的星号呀,大家看一下改没改成张飞改没改成没改成是不是这就对了呀,哎,这就对了哈,但是你这样是对的,说明它避免了脏毒,避免了脏毒,但是不可重复读和换读,它没有避免,我们试一下不可重复读,它依然能出现,为什么这样说呢?假如说我这个事物提交了。
09:02
Commit是不是有可能啊,好,他提交了,我这个事物没有结束,能看出来吧,没有结束,在同一个事物的多次查询中,你会发现我们两次查询结果啊,不一样是不一样吧,所以我们把这种现象称为不可重复度,说明白了吧,成为不可重复度啊,这也是不对的,这也是不对的,好,我先把这个提交,免得像刚才又忘了提交了,对吧?啊,好,那么所以说我们第二个隔离级别read committee的这种隔离级别的话,它可以避免丧毒,但是避免不了其他的。接下来我们换第三个隔离,几点能跟上吗?大家啊,开始换了哈,那我们就要换吗?Set session try这个是不是写着写着答案也背过了,ASA level叫什repeatable read。
10:03
啊,这次叫叫他了啊,那同样这边是不是也得改呀?哎,我这块直接这样吧,啊,然后这个改成re doubleable read对吧?啊,行了,那么现在呢,呃,按刚才的这个意思,咱们再来一个啊,Set auto commit等于零啊,我可以,其实我也可以先看一下里面的数据对不对啊,现在它应该是最新的数据,From叫做account啊看一眼哈,瞪大眼睛了,是不是一个妆飞一个妆敏啊,啊还挺还挺搭的是不是啊,那么现在呢,我们也是要做一个修改。刚才是不是说两次读的这个读的这个数据不一样啊,哎,我们说用新的隔离级别可以去解决,看是不是能解决update account set,比方说use their name等于,然后我们把张飞改成谁,哎,改成刘备吧,好,Where,哎,Where这样写也行,YID等于25,我是不是没有结束啊,没有结束吧,没有结束哈,然后再set auto commit等于零,Slap的这个大家发现改成刘备了吧,没有,所以没有增读吧,啊,行,然后呢,我这块呢,人家可能要提交,是不是这个意思啊。
11:29
刚才是不是也是这么演示的,我这块提交,那像刚才要是这样执行,是不是两次读的不一样啊好,现在我们执行大家看一下一样不一样一样,所以说我对于同一个事物同一个查询来讲啊,同一个事物多次查询来讲,是不是它肯定是结果一样的呀,哎,这样才对,那么什么时候才变成最新的呀?哎,你这个事物提交了,是不是再新开一个事物啊,比方说你再新开一个,再查看是不是才变成最新的呀?哎,这种感觉就对了。
12:00
是不是这种感觉就对了啊,所以说我们第三个隔离级别的话,它可以去解决什么问题呢?它可以解决我们的脏毒,还有不可重复读,但是呢,换读不能解决啊,换读不能解决,所以呢,咱们再去演示一下换读它是什么意思,换读不是特别好理解,对吧?因为它跟脏读很像啊,那咱们演示一下它,它是这样的一个意思,我们先呢设置一下。好好,这个不用设置,因为就是它对吧?啊,不用设置了啊好,那么呢,我们再去开一个比方说set auto commit等于零,我做一个什么事情呢?整体的修改update account set,我们的user name都让它等于MM好分号,这样的话。我们知道现在是不是就有两行数据啊,对不对啊,就有两行数据,那么我我一回车按说是不是应该两行受影响呀,是不是这样的一个感觉,对吧,但是呢,我在做的过程中呢,他可能要干这样的一件事情,看啊这一方我们开启一个事物,我先把刚才的事物先提交,然后呢,我们在set auto commit等于零,我们查看一下现在是不是就是他俩呀,诶我要做一个什么呢?插入。
13:21
Insert into account values括号,然后因为是自增长链,所以我这写now对不对,我想插入一个谁呢?比方关于,哎,关于对吧,行了,那么现在呢,我要做一个它分号,然后结尾啊,哎,我这个是说啥呢?里边有几个列呀,三个列是吧?嗯,再来一个没钱是吧,是不是这样啊,哎,然后呢,我们提交了commit,然后呢,我再看它本来的话呢,它应该是两行的,能明白意思吧?啊其实其实最好的效果是这样来看,怎么看呢?你先查看一下。
14:02
其实刚才应该先查看一下,能听懂吧,我没有查看啊,就就那么着吧啊Apple,那所以说这个时候你再整体的去set user name,等于是不是叫MM啊,按说我这块执行的时候是不是就两行啊,但你回车你翻是几行受影响啊,三行知道意思了吧?啊就好像是说我明明就是两行啊,怎么就突然变成了三行受影响呀,所以就好像是不是跟出现了幻觉一样啊,哎,这种我们就称为幻读。啊,就成为换读能听懂意思吧,好,我再来一遍啊,有的同学没有跟上,因为这个的确有点难理解,看到啊,再来一遍,一般的换读就是针对插入的换读,它就是针对插入的啊再来一遍啊,那么还是在这个隔离级别下,我先查看一遍哈,Select的星号from我们的account,现在应该是不是这三行数据啊好,那么我都看了一遍了,这就是三行,那我就想把这三行是不是都改了呀,就这种感觉哈,Update account set,比方说username我都改成KQQ对吧?好,然后但是我由于一件事情我可能没有立马执行能听懂吧,啊然后现在呢,我就干啥去呢?另外人家一个失误,是不是同时set out这个玩意儿,他要干啥呢?是不是进行一个插入呀,啊插入哎,同时人家进行一个插入,插入呢,好这哈,然后。
15:32
再来一个比方说2000块这个逗号写错了,好像好对吧,然后回一下车,然后人家也提交了,行了,然后呢,他呢,就缓了一小会儿再去执行,是不是四行受影响,大家看这个效果是不是很明显啊,明明看到的是三行,但是是几行受影响四行,所以说我的read repeatable read这种隔离级别它也没有避免啊,这种叫做换毒的现象它也没有避免,谁能避免呀,最高级别可以避免,来试一下啊,也就是人家每个级别是不是都有自己的意思呀啊,再去更改隔离级别之前,是不是先提交一下对吧?嗯,好了,来再接着试哈,跟上了,哎,算了,我自个写吧,Set section trans section asalation level,然后是叫做C。
16:32
Are theleable是不是比较难写对吧?好,这个叫做穿行画,那同样它也是哈,改一下跑哪去了,这呢,Level叫做s lazable,好,那行吧,这个现在已经更改成最高隔离级别了,它就是可以去解决任何问题了,任何刚才说到的数据并发问题了,那么咱们其实重点来去看一下换读就行了,那三个肯定已经避免了,对不对?那三个肯定避免了,就看一下换读啊好,开始了,瞪大眼睛哈,先这样啊,开启一下,然后呢,我们也是查看一下拉的来。
17:23
好,现在是不是四行呀,好,那么现在这四行呢,我要做一个更改account set username吧,等于比方说WW好能看明白吧,但是我们没有执行,然后这个时候呢,我要干嘛也开启一下,嗯,然后我这是不是又要插入一个数据啊,哎,做一个他是不是这种感觉好回一下车,但是你这次能插入吗?你看我已经回了车了。是不是没反应啊,它是不是阻塞操作呀,这种感觉是不是有点类似于当时Java中学的等待你干啥呀,等待用户输入啊什么的,对不对,这是一个阻塞操作,意思是说他在一直等待另外一个事物,是不是释放这个锁呀,是不是有点像这个,其实就是这个意思啊,也就是他现在貌似是拿着一个锁在占用着,对不对,他没有释放,那么其他的事物能做操作吗?不能做,不能做,所以你看他将一直等待,其实我已经按了回车了,能看到吧?啊,然后你除非是这边看到啊,除非这边我正常的执行提交了啊,你看这边其实还在等待,我怎么着呢,等need了啊,哎,提交才行,当然他说我这个是等待有点超时了,是不是啊,已经超时了,这不是他们到把我提出来了吗?是不是啊,好吧,其实这个意思已经明白了啊,已经明白了哈,什么。
18:53
接下来来看这我们使用串行化的话呢,它的确可以去禁止其他事物对该数据表做增删改的操作,是不是都做不了了呀,所有的并发并发问题它都可以避免了,非常好,但是因为你这个是不是什么都干不了啊,所以性能十分低下啊,所以也是一般来讲不用它,一般咱们这个是不是就用这种默认的隔离级别就行了呀啊,这是这个哈,哎,那这个地方的话,嗯,这没写啊,那我就跟大家说一下,就是我们这个创行画的话,它的性能比较低啊,性能比较低,虽然说可以解决这些问题,所以你也要慎用啊,好吧,这是关于合理级别的一个演示啊,接下来呢,再给大家去说一下刚才咱们用到的一些SQL命令哈,啊总结一下,如果我们查看当前隔离级别使用的是select的一个变量啊,一个全局变量。
19:53
不是啊,那么假如说我要设置隔离级别的话,刚才我是不是这样设置的呀?啊,前面我加了一个谁呀,Session啊,其实不加的话也是默认当前,但是我为什么加呢?因为我发现如果说你不加光这么写,你查看这个的话,它没有马上生效,没有马上生效明白吧,那个效果上没出来,所以说你还是加上session审这个代表设置当前连接或者当前未会话的隔离级别,换句话说它你比方在这个设置上了,它跟这个有关系吗?没有,所以你看我两个是不是都设了呀?啊,它只针对当前的连接有效啊,只针对它什么叫做当前连接啊,你再开一个这个可以再开一个之后,因为你每次打开是不是你在这都得加一个这个呀,是不是加个这个呀,是不是新用户啊啊,有的同学可逗了他老师,我这不开了个询问吗?这叫一个链接,我再打开。
20:53
重问是不是又是个连接啊,不是啊,这都是一个连接,明白吧,这都是一个连接啊,都是是不是在这个下的连接呀?啊,这是一个连接,你和我开多个这个是不一回事啊啊这个要注意啊,行吧?呃,然后当然我也可以设置全局的隔离级别是加上格global卜啊这个是针对所有的会话,所有的连接都有效,明白吧?啊,但是一般需要你重启一下才有效啊啊才能显示出来啊行吧,这个我们总结一下,写到这个地方来。
21:30
哎,写哪个地方啊,显示事物这儿哈,事物的隔离级别,好,咱把这几个隔离级别呢跟说一下,一个叫做瑞的,嗯,可离体的,这个呢,是指可以出现什么问题呢?出现脏读,换读不可重复读啊好,还有一个叫做read和迷起的,这个可以去避免脏读啊出现啊,换读和不可重复读啊,哎,那我干嘛这么写呢?我可以这么写呀,哎,是不是这样写,换读不可重复读是不是可以这么写啊,嗯,行,然后把这个就可以去掉了。
22:30
对,打对勾,这个的话是全全全对勾好这个的话是错对对是这样吧,好,然后还有一个叫做receptable read,这个的话呢,是错错是错吧,哎,这个换留在这了是吧,呃,换换那个换一下吧,换一下你要不的话不好看,对就是这个意思,然后这个的话就是换读啊,其实主要就是不好记是吧,好然后这个的话是错错对好了,最后一个叫做C2LA,这个应该都都错哈。
23:30
都错了,好。没了,然后呢,咱们来去说一下,就是我们默认的是谁呀?啊my circlel中默认第三个隔离几点,就是repeatable read,对吧?好,然后70号口中默认对第二个哈,这样给你写,记得比较清晰,叫做瑞的可琳写的好了,然后有几个命令,比方说我们查看的话是select,是不是叫这个呀,Asation这个代表的是查看隔离级别,还有一个设置隔离级别set,要不这么写吧,Section或者是global section as level。
24:35
啊,是不是后面加隔离级别完事对吧?啊下课休息。
我来说两句