栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅谈mysql事务隔离级别与脏读、幻读等情况

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈mysql事务隔离级别与脏读、幻读等情况

目录

前言

事务还要注意两个日志


前言

 在并发下事务会容易出现一些问题:
脏读 :一个事务开始读取了某行数据,另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。(别人一修改,我这边就体现了)
不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。例如,在两次读取的中途,有另外一个事务对该型数据进行了修改,并提
交。(别人修改提交了,影响了我这边,比如第一次结果是A,第二次是B,因为别人把A改成B并且提交了)
幻读:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据(SQL不一定一样)。(就是两个事务都先查询,不存在就插入,结果插入的是同一条,就报错了,所以就是某个事务查询的时候加个排它锁就能解决了!)
这是因为在两次查询过程中有另外一个 事务插入数据 在MySQL中存在(InnoDB)事务存在着4中隔离级别,不同的隔离级别对事务的处理不同。
未授权读取(未提交读 Read Uncommitted):READ-UNCOMMITTED | 0:存在脏读,不可重复读,幻读的问题。如果一个事务已经开始写数据,则另外一
个数据则不会允许同时进行写操作,但允许其他事务读此行数据。隔离级别可以通过“排他写锁”实现。
授权读取(已读提交 Read committed):READ-COMMITTED | 1:解决脏读的问题,存在不可重复读,幻读的问题。这个可以通过“排他写锁”实现。读取数
据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
可重复读取(Repeatable Read):REPEATABLE-READ | 2:解决脏读,不可重复读的问题,存在幻读的问题,默认隔离级别。可通过“共享锁”,“排他锁”实
现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
序列化(Serializable):SERIALIZABLE | 3:解决脏读,不可重复读,幻读,可保证事务安全,但完全串行执行,性能最低。提供严格的事务隔离。它要求事
务序列化执行,事务只能一个接着一个地执行,不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须要通过其他机制保证新插入的数据不
会被刚执行查询操作的事务访问到。

innodb默认RR,保持就好,但是要解决幻读问题(加排它锁解决)(mysql8已经解决,之前的版本注意一下) 

事务还要注意两个日志

重做日志与回滚日志
到现在为止我们了解了 MySQL 中的两种日志,回滚日志(undo log)和重做日志(redo log);在数据库系统中,事务的原子性和持久性是由事务日志
(transaction log)保证的,在实现时也就是上面提到的两种日志,前者用于对事务的影响进行撤销,后者在错误处理时对已经提交的事务进行重做,它们能保
证两点:事务与锁基础.md to 事务与锁基础.pdf by MARKDOWN-THEMEABLE-PDF
Page 14/14 © Copyright Wednesday, Mar 18, 2020, 4:57 PM by COMPANYNAME
1. 发生错误或者需要回滚的事务能够成功回滚(原子性);
2. 在事务提交后,数据没来得及写会磁盘就宕机时,在下次重新启动后能够成功恢复数据(持久性); 在数据库中,这两种日志经常都是一起工作的,我们
可以将它们整体看做一条事务日志,其中包含了事务的 ID、修改的行元素以及修改前后的值。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号