数据库基础 – 数据库事务

数据库基础 – 数据库事务

1.事务

1.1 概念

在数据库中事务指一个操作,该操作由多个步骤组成,要不全部成功,要不全部失败。


2.数据库四大特性

2.1 ACID

数据库的四大特性简称为AICD接下来将围绕这四个特性介绍

2.1.1 原子性(Atomicity)

数据库中事务作为一个整体被执行,包含在其中的相关操作要不全部执行,要不全部不执行。

2.1.2 一致性(Consistency)

一致性确保事务将数据库从一种一致的状态转换到另一种一致的状态。即事务在执行前后数据库必须满足一些预定义的一致性规则,如约束、出触发器、级联等。若事务执行后数据库不满足这些规则,则整个事务将回滚。

2.1.3 隔离性(Isolation)

多个事务并发执行时,每个事务的执行不影响其他事务执行。

2.1.4 持久性(Durability)

已被提交的事务对数据库的修改应该永久保存在数据库中。

2.1.5 实现流程

MySQL采用的是InnoDB引擎,该引擎实现上述四大特性的方式如下

  • 持久性:通过redo log(重做日志)实现。
  • 原子性:通过undo log(回滚日志)实现。
  • 隔离性:通过MVCC(多版本并发控制)和锁机制实现。
  • 一致性:通过持久性、原子性、和隔离性一起保证。

3.事务并发问题

3.1 脏读

数据库读取了未提交的数据。事务 A 读取事务 B 尚未提交的数据,此时如果事务 B 发生错误并回滚,那么事务 A 读取到的数据就是脏数据。

3.2 不可重复读

前后多次读取,内容不一致。事务 A 在事务 B 开始前读和事务 B 结束后读的数据不一样,因为数据被事务 B 修改了。

3.3 幻读

当同一个查询在不同时间产生不同的结果集时,类似出现幻觉,称为幻读。事务 A 在读取某个范围内的记录时,事务 B 在该范围内插入了新记录或删除了旧记录,事务 A 再次读取该范围内的记录时,前后获取的结果集不同,产生了幻读。幻读比不可重复读取更难防范,因为锁定第一个查询结果集中的所有行并不能阻止导致幻像出现的更改。


4.事务隔离级别

4.1 目的

上述三种事务并发问题都会导致数据的不可靠,因此数据库中存在多个事务隔离级别,在保证执行效率的前提下尽可能避免数据的不可靠性。

4.2 隔离级别

按照隔离级别执行效率从高到底依次是

  • 未提交读(RU)
  • 已提交读(RC)
  • 可重复读(RR)
  • 串行化(Serializable)

4.2.1 未提交读(Read Uncommitted)

允许脏读、不可重复读和幻读,隔离级别最低,事务可以读取其他事务尚未提交的数据,并发处理能力最高且系统开销最小。

4.2.2 已提交读(Read Committed)

不允许脏读,但允许不可重复读和幻读。事务只能读取已提交的数据,避免脏读,其中可能会导致不可重复读和幻读。大多数数据库的隔离级别为RC,但MySQL不是。

4.2.3 可重复读(Repeatable Read)

不允许脏读、不可重复读,允许幻读。事务在整个事务期间保持一致快照,其他事务的修改不会影响正在运行的事务,防止不可重复读。该级别为MySQL默认事务隔离级别。

4.2.4 串行化(Serializable)

解决所有事务并发问题。最高隔离级别。通过强制事务排序依次执行,从而避免一切事务并发问题。由于事务是串行执行,所以效率会大大下降,应用程序的性能会急剧降低。

4.3 实现过程

  • 未提交读:该级别可以读到未提交事务修改的数据,因此直接读取新数据即可。
  • 已提交读、可重复读:通过MVCC实现。
  • 串行化:通过加读写锁的方式避免并行访问。

5.MVCC

5.1简介

MVCC即多版本并发控制,其基础理论是乐观锁。通过对数据行的多个版本管理实现数据库的并发控制,读取数据的时候不需要加锁也可以保证事务的隔离效果,以此提高数据库并发性能。
MySQL 中 InnoDB 采用了 MVCC 来实现“读已提交“和“可重复读”两个隔离级别。其他两个隔离级别和 MVCC 不兼容,因为“读未提交”总是读取最新的数据行,不需要进行版本控制,而“串行化”则会对所有读取的行加锁。

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值