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

数据库事务

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

数据库事务

什么是事务

       事务是一系列操作的集合,要么全做,要不不做,保证数据库处于一致性的状态。

       事务使数据库系统更好的进行故障恢复和并发控制,使数据库处于一致性状态。


事务有什么特性

  • 原子性:事务内的操作要不全做,要么不做
  • 一致性:事务前后数据处于一个客观合理的状态
  • 隔离性:在并发状态下事务间不相互影响
  • 持久性:事务的操作不会由于故障等原因丢失

为了保证事务的特性,数据库并发控制和日志恢复是关键


事务并发异常

  • 脏写
  • 更新丢失
  • 脏读
  • 不可重复读
  • 幻读  

事务的隔离级别

mysql默认隔离级别是可重复读

        


事务隔离的实现机制

  • 基于锁的并发控制

       共享锁:数据库对事务A加共享锁,对其它事务只能加共享锁,不能加排他锁;

       排他锁:数据库对事务A加排他锁,对其它事务不能加任何锁;

  • 基于快照隔离的并发控制

       多版本并发控制(mvcc),给每一行数据增加两个隐藏字段,创建时间和过期时间(时间而非时间戳,指事务版本号),

  • 其它

Mvcc具体实现

  • 快照读:读快照版本,指历史版本

      普通的select为快照度

  • 当前读:读最新版本

       UPDATE、DELETE、INSERT、SELECT ...  LOCK IN SHARE MODE、SELECT ... FOR UPDATE是当前读

  • 锁定度
  • 一致性非锁定读

  • 悲观锁
  • 乐观锁
  • 行锁
  • 间隙锁
  • next-key lock

  • 利用MVCC实现一致性非锁定读,这就有保证在同一个事务中多次读取相同的数据返回的结果是一样的,解决了不可重复读的问题
  • 利用Gap Locks和Next-Key可以阻止其它事务在锁定区间内插入数据,因此解决了幻读问题

参考

  • 数据库事务的概念及其实现原理 - takumiCX - 博客园 
  • MySQL事务隔离级别的实现原理 - 废物大师兄 - 博客园
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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