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

数据库(2) ——事务

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

数据库(2) ——事务


数据库(2) ——事务


文章目录
  • 数据库(2) ——事务
    • 1.事务特性(ACID)
    • 2.事务隔离级别
    • 3.MySQL的ACID特性分别是怎么实现的?
      • 3.1原子性实现原理
      • 3.2一致性实现原理
      • 3.3隔离性实现原理
      • 3.4持久性实现原理
  • 待更新--

数据库(2) ——事务 1.事务特性(ACID)

①原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
②一致性(Consistency)
事务发生前后在整体上必须保持逻辑一致性。
③隔离性(Isolation)
事务是独立单位,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
④持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的。

2.事务隔离级别

①读未提交
一个事物允许读另一个未提交事务的数据。
②读提交
一个事物必须在另一个事物提交后读取。
③重复读
一个事物开始重复读某个数据时,其他事物不可访问与修改该数据。
④序列化
要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。

3.MySQL的ACID特性分别是怎么实现的?

参考答案

3.1原子性实现原理

当事务执行失败或调用了rollback,导致事务需要回滚,我们可以撤销该事物执行的所有操作,回退到初始状态。

3.2一致性实现原理

①保证原子性、持久性和隔离性,如果这些特性无法保证,事务的一致性也无法保证。
②数据库本身提供的保障,例如不允许向整形列插入字符串值、字符串长度不能超过列的限制等。
③应用层面进行保障,例如如果转账操作只扣除转账者的余额,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致。

3.3隔离性实现原理

隔离性追求的是并发情形下事务之间互不干扰。简单起见,我们主要考虑最简单的锁机制。

隔离性的探讨,主要可以分为两个方面。
①第一方面,(一个事务)写操作对(另一个事务)写操作的影响:

锁机制保证隔离性。

要求同一时刻只能有一个事务对数据进行写操作,事务在修改数据之前,需要先获得相应的锁。

锁可以分为表锁、行锁以及其他位于二者之间的锁。
表锁在操作数据时会锁定整张表,并发性能较差。
行锁则只锁定需要操作的数据,并发性能好。
出于性能考虑,绝大多数情况下使用的都是行锁。

②第二方面,(一个事务)写操作对(另一个事务)读操作的影响:

MVCC保证隔离性。

它最大的优点是读不加锁,因此读写不冲突,并发性能好。

3.4持久性实现原理

我们首先提供了缓存(Buffer Pool)。
当从数据库读取数据时,会首先从Buffer Pool中读取,如果Buffer Pool中没有,则从磁盘读取后放入Buffer Pool。
当向数据库写入数据时,会首先写入Buffer Pool,Buffer Pool中修改的数据会定期刷新到磁盘中(这一过程称为刷脏)。

但是如果MySQL宕机,而此时Buffer Pool中修改的数据还没有刷新到磁盘,就会导致数据的丢失,事务的持久性无法保证。
于是,我们引入了日志的概念。
用来记录对数据库执行的历史操作。

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

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

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