【lesson28】MySQL事务隔离级别的介绍

文章目录

  • 如何理解隔离性
  • 隔离级别
    • 读未提交【Read Uncommitted】
    • 读提交【Read Committed】
    • 可重复读【Repeatable Read】
    • 串行化【Serializable】
    • 查看与设置隔离性
      • 查看全局隔级别
      • 查看(当前会话)局部隔级别
      • 查看默认隔离级别
    • 设置隔离级别

如何理解隔离性

  • MySQL服务可能会同时被多个客户端进程(线程)访问,访问的方式以事务方式进行
  • 一个事务可能由多条SQL构成,也就意味着,任何一个事务,都有执行前,执行中,执行后的阶段。而所谓的原子性,其实就是让用户层,要么看到执行前,要么看到执行后。执行中出现问题,可以随时回滚。所以单个事务,对用户表现出来的特性,就是原子性。
  • 但毕竟所有事务都要有个执行过程,那么在多个事务各自执行多个SQL的时候,就还是有可能会出现互相影响的情况。比如:多个事务同时访问同一张表,甚至同一行数据。
  • 就如同你妈妈给你说:你要么别学,要学就学到最好。至于你怎么学,中间有什么困难,你妈妈不关心。那么你的学习,对你妈妈来讲,就是原子的。那么你学习过程中,很容易受别人干扰,此时,就需要将你的学习隔离开,保证你的学习环境是健康的。
  • 数据库中,为了保证事务执行过程中尽量不受干扰,就有了一个重要特征:隔离性
  • 数据库中,允许事务受不同程度的干扰,就有了一种重要特征:隔离级别

在事务常见中,隔离是必要的。运行中的事务进行互相隔离。
隔离性:在事务运行过程中“不会”出现互相干扰。根据影响程度的不同定义不同的隔离级别

隔离级别

读未提交【Read Uncommitted】

在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。

之前我们前面的操作就是读未提交:事务1还没有结束(或者还没有commit),事务2就能看到事务1修改的数据。

读提交【Read Committed】

该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满足了隔离的简单定义**:一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次 select, 可能得到不同的结果。**

读提交简单就是:
事务1还没结束,事务2看不到事务1修改的数据。
事务1结束了(或者commit了),事务2才能看到事务1修改的数据。

可重复读【Repeatable Read】

这是 MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取操作数据时,会看到同样的数据行。但是会有幻读问题。

可重复读简单就是:
事务1还没结束,事务2看不到事务1修改的数据。
事务1结束了,事务2也还是看不到事务1修改的数据。
只有事务2结束了,我们在新起一个事务,才能看到事务1修改的数据。

串行化【Serializable】

这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁,。但是可能会导致超时和锁竞争(这种隔离级别太极端,实际生产基本不使用)

对数据进行修改必须是串行化的。
上面的所有隔离级别都是对读写并发的设计
写写并发只能串行化

查看与设置隔离性

查看全局隔级别

【lesson28】MySQL事务隔离级别的介绍_第1张图片

查看(当前会话)局部隔级别

【lesson28】MySQL事务隔离级别的介绍_第2张图片

查看默认隔离级别

【lesson28】MySQL事务隔离级别的介绍_第3张图片
这里因为我们修改过,所以隔离级别是读未提交。

设置隔离级别

先查看绘画的所有隔离级别
【lesson28】MySQL事务隔离级别的介绍_第4张图片
再修改局部隔离级别
【lesson28】MySQL事务隔离级别的介绍_第5张图片
【lesson28】MySQL事务隔离级别的介绍_第6张图片

我们这里会发现两个窗口的隔离级别并没有发生改变。
这里我们就会想到会不会根之前一样,要退出去,在进入才会发生改变。
【lesson28】MySQL事务隔离级别的介绍_第7张图片
我们发现修改局部隔离级别,所有隔离级别并没有发生任何的改变

那么我们修改全局的隔离级别。
【lesson28】MySQL事务隔离级别的介绍_第8张图片
我们发现还是没有改变,我们退出去重新进入一下。
【lesson28】MySQL事务隔离级别的介绍_第9张图片
这时我们发现所有的隔离级别都更改了。
【lesson28】MySQL事务隔离级别的介绍_第10张图片
我们这里再开启一个会话,隔离级别也还是发生了改变。
我们发现修改全局隔离级别,所有隔离级别会发生改变

你可能感兴趣的:(MySQL,mysql,数据库)