00:00
注意听,因为它这一块演示的话还是挺多的,好呃,接下来呢,咱们来看有一种情况,就是当我们如果同时运行多个事物的时候,像刚才是不是就接近演示了一个事物啊啊,那么假如说我们有一种需要,需要去运行多个事物,而这多个事物访问的还是我们同一个数据库中的相同数据,那么如果没有去采取对应的隔离机制,就有可能导致各种并发问题,这个就有点类似于咱们讲现程的那个安全问题一样,就是假如说我们多个现场访问统一数据资源,是不是有可能会导致线程安全问题啊,那我们说了,那个时候我们可以用是不是叫做加锁的方式,对吧,实现线程同步,然后来去解决那种现象,其实我们这个也类似啊,我们首先看一下它容易导致哪些问题,第一个问题的话叫做脏毒。
01:00
什么叫做桑读呢?桑读它的意思是说,假如说呀,我有两个事物,T1T2,那么我们T1呢,读取了,T2呢,呃,这么这样去说,T2呢,更新了,但是他没提交,还没提交呢,我T1是不是就读取了呀,那所以T1读到的这个数据就相当于是一个无效的临时的数据,对我举一个例子哈,比如说某一位同学,比方说那个呃,张飞吧,哈,对吧,那张飞的话,每个月需要靠他女朋友给他钱,给他打一笔零花钱哈,然后呢,每每个月其实就打50块钱,然后这个这一次呢,这一次呢,他女朋友这个一不小心打过去了500,能听懂吧,打过去500,然后呢,这个张飞一看他的银行卡正好呢,他去查银行卡了,对吧,哎,500,他说今这一次怎么我女朋友这么好呢,是不是这么大方,他看到了,看到了这个500这个数字,哎,那这个的话。
02:00
其实是一个临时的数据啊,等了一会儿呢,他女朋友反过神来了,是不是他那个东西没提交啊,他是赶紧撤销了是吧,说怎么能打500呢,是不是吃几个馒头其实用不了500了,对不对,他就撤销了,所以说他这个张飞同学,他看到的那个500块钱,实际上是不是一个临时无效的数据啊,哎,这种我们就称为看到的,是啊,这个数据叫做脏读啊,称为脏毒,能听懂吧啊它这个意思好,再看第二个什么叫做不可重复读呢?不可重复读呢,他的意思跟刚才也有点像哈,就是在那个基础之上的,那么也是说他女朋友跟他打了500块钱,但是没有提交,那么张飞去看他的这个银行卡余额,他看到了500,因为他女朋友马上又撤销了,所以呢,张飞他就是怎么着呢,他是不是又去点击了一下,查看余额,发现这一次不是500了,又变成多少钱了,50是吧?啊变成50,那你会发现。
03:00
看他插进这个银行卡之后,我们去查看了两次余额,这两次余额一样,不一样啊,不一样,我们把这种现象称为不可重复,多称为不可。因为呢,我同一个事物呢,多次查询的时候,这个结果不一样,那么所以说呢,这种问题呢,我们称为不可重复多,哎,人家名字起的也非趁啊,那意思是说呢,哎,你不能再重复读了,你再读这个结果不一样,这个跟我们实际不符了,哎,所以说这就是一种问题哈,叫做不可重复读。那么接下来呢,我们看第三点,第三点呢,它称为换读,换读是什么呢?那换读是指我其中一个事物呢,在读取这个字段的时候,或者读取数据的时候,那我另外一个事物实际上做了插入,但是还没提交,所以他这一次读的时候有可能还还还是三行。然后等人家听着事物呢,这个插入提交了,它实际上是不是就怎么样了,是变成四行了,哎那么这个感觉就好像是说,哎明明刚才是三行,哎怎么现在我一我我这我这个再读它是不是就变成四行了,这这就跟出现幻觉一样哈,这叫做幻读。
04:07
啊,那么实际上脏读和换读它们两个是非常类似的,那么只不过是说,哎,脏读它是针对的是一般来讲针对的是更新,而我们换读呢,它针对的是插入或者是删除,这两个特别容易搞混啊,那么因为他们两个都是指我一个事物读取数据时,另外一个事物还没有提交,但是针对的这个,呃,侧重点是不一样的哈。哎,那么我们再对这个幻毒举一个案例,你比如说呃,这个张飞呢,那么今天呢,这个看见屋里人少,里边就俩人,这俩人呢,长得也比较瘦小,他也知道呢,平时吃的比较少,哎,所以说呢,他想耍一下大方哈,就说我请你们吃饭哈,我请大家所有人吃饭啊,那其实大家所有人也就这俩人对吧?啊,那刚说完呢,这个他低人脑袋,刚看一下钱,诶再一抬脑袋上,突然发现屋里多了一个人。啊,哎,有有有另外一个人过去了,那么这个就跟刚才他看到那仅仅屋子里只有两个人是一个幻觉一样,哈,哎,这就叫幻读,好吧,哎,这就是我们常见的几种并发问题,然我们是不是应该尽量避免呀?哎,那如何去避免,我们看一下下面一步,我们可以去通过设置隔离级别来去避免我们刚才说到的这几种现象,那当然呢,每种数据库呢,它都有自己的隔离级别的这种支持,其中Oracle的话,它支持两种事物隔离级别,比如说叫做read committee的,还有一个叫串行化,叫reliable啊,就相当于我们Java中说的那个叫做序列化,对不对?哎,这个叫做串行化,好,默认的Oracle有个隔离级别呢,叫做读以提交啊呃,它一共就支持俩,那咱my circle呀,支持的比较多了,它支持四种,那我们这个my circle。
05:58
和默认隔离级别,是啊,Repeatable rate叫做读,这叫不可重复读是吧?啊,这就变成了可重复读了啊好,那这四种隔离级别的话,它都分别对应着去改变我们刚才说到的这种。
06:15
并发的这种情况,我们接下来是不是就一个一个的试一下呀,啊,看一下它是如何去。
我来说两句