事务的定义 以及 具备的四大特性概述:


事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

事务的四大特性

第一个,原子性,Atomicity,要么都是成功,要么都是失败。

原子性,在 InnoDB 里面是通过 undo log 来实现的,它记录了数据修改之前的值(逻辑日志),一旦发生异常,就可以用 undo log 来实现回滚操作。

第二个,一致性,Consistency,指的是数据库的完整性约束没有被破坏。

第三个,隔离性,Isolation,我们有了事务的定义以后,在数据库里面会有很多的
事务同时去操作我们的同一张表或者同一行数据,必然会产生一些并发或者干扰的操作,
那么我们对隔离性的定义,就是这些很多个的事务,对表或者行的并发操作,应该是透
明的,互相不干扰的。通过这种方式,我们最终也是保证业务数据的一致性。

第四个叫做持久性,durability。我们对数据库的任意的操作,增删改,只要事务提交成功,那么结果就是永久性的,不可能因为我们系统宕机或者重启了数据库的服务 器,它又恢复到原来的状态了。这个就是事务的持久性。

持久性是通过 redo log 来实现的,我们操作数据的时候,会先写到内存的 buffer pool 里面,同时记录 redo log,如果在刷盘之前出现异常,在重启后就可以读取 redo log 的内容,写入到磁盘,保证数据的持久性。

实际上还有一个双写缓冲的机制
因为存储引擎的页和操作系统的页大小不一致。
一个存储引擎 page 的数据要写 4次,如果中间发生异常,或造成页数据的不可用。
所以,必须把页的数据备份起来,这 个就是双写缓冲(double write buffer)。

原子性,隔离性,持久性,最后都是为了实现一致性。


SQL92标准

  1. 第一个隔离级别叫做:Read Uncommitted(未提交读),一个事务可以读取到其 他事务未提交的数据,会出现脏读,所以叫做 RU,它没有解决任何的问题。
  2. 第二个隔离级别叫做:Read Committed(已提交读),也就是一个事务只能读取 到其他事务已提交的数据,不能读取到其他事务未提交的数据,它解决了脏读的问题, 但是会出现不可重复读的问题。
  3. 第三个隔离级别叫做:Repeatable Read (可重复读),它解决了不可重复读的问题, 也就是在同一个事务里面多次读取同样的数据结果是一样的,但是在这个级别下,没有定义解决幻读的问题。
  4. 最后一个就是:Serializable(串行化),在这个隔离级别里面,所有的事务都是串 行执行的,也就是对数据的操作需要排队,已经不存在事务的并发操作了,所以它解决 了所有的问题。

Mysql-(三)-mysql中的事务

两大实现方案 :

LBCC

第一种,读取数据的时候,锁定我要操作的数据,不允许其他的事务修改就行了。
这种方案我们叫做基于锁的并发控制 Lock Based Concurrency Control(LBCC)。

MVCC

在修改数据的时候给它建立一个备份或者叫快照,后面再来读取这个快照就行了。
这种方案我们叫做多版本的并发控制 Multi Version Concurrency Control(MVCC)。

MVCC 的核心思想是: 我可以查到在我这个事务开始之前已经存在的已提交的数据,即使它在后面被修改或者删除了。在我这个事务之后新增的数据,我是查不到的。

相关文章:

  • 2021-06-28
  • 2021-12-04
  • 2021-11-28
  • 2021-10-01
猜你喜欢
  • 2022-01-14
  • 2021-11-20
  • 2021-11-27
  • 2021-07-07
  • 2021-09-08
  • 2021-12-22
  • 2021-07-08
相关资源
相似解决方案