• Mysql系列一:事物概念及特性



    一、事物概念及特性

    1.1、概念

    在数据库系统中,事物代表的是一个操作或者一系列操作的最小逻辑单元,在这个逻辑单元内的所有的操作要么全部成功执行,要么全部失败,不存在有的成功有的失败的清空,事物提交之后,事物内的所有操作都会被保存

    1.2、原子性

    原子性是指在事物内的多个操作,要么全部执行,要么全部失败。

    1.3 、一致性

    数据库从一个一致性状态变到另一个一致性状态 ,如数据的一致性。以转账为例,若A拥有1000元B拥有400元,他们的总数是1400元,A向B转账600元之后,无论是否出现异常,AB的总数依然是1400元

    1.4、隔离性

    不同事物之间的操作互不影响,如A事物内的操作在B事物中是无感的,B事物只能读取到A事物提交前的数据或提交后的数据。

    1.5、持久性

    事物提交之后,会永久性的保存到磁盘中,数据不会丢失。

    二、标准事物的隔离级别

    事物隔离级别实现方式
    未提交读(RU)读取:不加锁
    写数据:在更新数据的瞬间加行级共享锁,直到事物结束才会释放。
    提交读(RC)读取:在读取数据的瞬间加行级共享锁,读完立即释放
    写数据:在更新数据的瞬间加行级排他锁,直到事物结束才会释放。
    可重复读(RR)读取:在读取数据的瞬间加行级共享锁,直到事物结束释放。
    写数据:在更新数据的瞬间加行级排他锁,直到事物结束才会释放。
    序列化(S)读取:在读取数据时加表级别共享锁,直到事物结束才会释放。
    写数据:事物更新数据时加表级排他锁,直到事物结束才会释放。

    不过Mysql中引入了MVCC版本控制,与之有所不同。

    三、Mysql事物的隔离级别

    2.1、读未提交(READ UNCOMMITTED)

    开启事物A开启事物B
    查询余额1000
    查询余额1000
    update 余额 1500
    查询余额1500
    提交事物
    提交事物

    在A事物未提交时,B事物可以获取到A事物未提交的数据,这种现象称为脏读

    2.2、读已提交(READ COMMITTED)

    该隔离级别解决了脏读问题,具体措施就是,在修改数据时,进行加写锁,等待事物提交或者回滚才会释放锁,但并未阻塞读取,Mysql读取时引入MVCC版本控制,每次都会读取最新的版本,避免脏读问题。但会出现不可重复读的问题,A事物修改之后并提交,此时B事物再次读取数据不一致。

    开启事物A开启事物B
    查询余额1000
    查询余额1000
    update 余额 1500
    查询余额1000
    提交事物
    查询余额1500(数据不一致)
    提交事务

    可以发现,B事物在第三次读取的时候,A事物提交了,B读取数据不一致,称为不可重复读

    2.3、可重复读

    该级别下,事物读取的操作会对数据加读锁,并且事物释放时才会释放锁,所以此时另一个事务若是修改想要加写锁的话是加不上的,需要等待释放另一个事物释放读锁才能继续。

    但mysql默认隔离级别,解决不可重复读的措施现在是通过MVCC版本控制读取唯一视图,而并非上述的加锁情况,后续再详细讲解。因为是行级锁,所以可能会产生幻读的情况。

    注意: mysql在该级别通过MVCC以及锁机制解决了幻读的问题,不需要升级成序列化级别。

    比如:幻读时发生在范围查询时,没有对在该范围内不存在的数据进行加锁(如 10>id>5可能没有6,7,8的数据),而导致在此时我插入数据6、7、8的时候可以成功,而下次再次查询就多出来了条数据。使用 **间隙锁 **可以避免这种情况,这儿先提一嘴,后面再详细讲解。

    2.4、序列化

    最高隔离级别,事物顺序执行,添加表级别锁,读取表级别共享锁,写入表级别排他锁,事物提交后才会释放所有的锁。

  • 相关阅读:
    Abp6.0 使用 appsettings.json配置Serilog.Sinks.MariaDB
    Apifox很难不爱
    GO语言篇之embed
    【web前端】定位
    Redis分布式锁实现
    网页设计中网站的设计与实现
    MyBatis标签之Select resultType和resultMap
    SEO优化的许多好处是与流量有直接关系
    【公益案例展】 网易“双碳”智控系统——开源开放赋能绿色发展
    STM32 -Bin/Hex文件格式解析
  • 原文地址:https://blog.csdn.net/zhengguofeng0328/article/details/126770345