MySQL原理(五)事务

一、介绍:

1、介绍:

在计算机术语中,事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。

2、事务的4大特性

原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

2.1、原子性(Atomicity):

事务是一个原子操作,它要么全部成功,要么全部失败回滚。如果事务中的任何操作失败,则所有操作都将回滚到之前的状态,以确保数据库中的数据不会被部分更改。

2.2、一致性(Consistency):

事务的执行必须使数据库从一个一致状态转换到另一个一致状态。这意味着事务必须满足所有约束条件,以保持数据的完整性和一致性。

2.3、隔离性(Isolation):

并发事务的执行不能相互干扰。事务必须在独立的空间内执行,这意味着它们看起来像是在独占访问数据库。

2.4、持久性(Durability):

一旦事务完成提交,其结果就是永久性的,并且即使在系统故障的情况下,也必须能够恢复这些结果。

注意,在firebird中,开启事务的方式是让调用程序使用StartTransaction(开启事务)、COMMIT(提交事务)和ROLLBACK(撤销事务)。

3、并发事务遇到问题:

(1)赃读:一个事务读到另外一个事务还没有提交的数据。

(2)不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

(3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 "幻影"。

二、事务隔离级别

1、四种隔离级别

 为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:(Serializable安全性最高,Uncommitted安全性最差)

之所以默认下第三个,是因为事务隔离级别越高,数据越安全,但是性能越低。

(1)查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

(2)设置事务隔离级别

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } 

2、mysql保障事务四大特性
2.1、原子性、一致性、持久化

实际上是由InnoDB中的两份日志来保证的,一份是redo log日志,一份是undo log日志。

(1)redo log:重做日志,负责记录的是事务提交时数据页的物理修改,即哪一页哪一行哪个字段做了什么修改。当数据库发生故障时,redo log可以用来恢复未完成的事务,实现事务的持久性。分为重做日志缓冲(redo log buffer)以及重做日志文件(redo log file),前者是在内存中,后者在磁盘中。

(2)undo log回滚日志,主要作用是在事务进行修改操作但还未提交之前,先记录下原始的数据状态。这样,当事务因为某些原因需要回滚或数据库发生故障时,可以利用undo log中的信息将数据恢复到事务开始前的状态。 作用包含两个 : 提供回滚(保证事务的原子性) 和MVCC(多版本并发控制) 。

(3)MVCC :全称 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。

注:隐式字段:我们创建表(id,name,age)后,插入数据时,InnoDB还会自动的给我们添加三个隐藏字段,前两个字段是肯定会添加的, 是否添加最后一个字段DB_ROW_ID,得看当前表有没有主键,如果有主键,则不会添加该隐藏字段。

2.2、持久性:

是通过数据库的锁,加上MVCC来保证的。

相关推荐

  1. MySQL | 事务

    2024-02-03 07:18:04       43 阅读
  2. Mysql底层原理一:事务

    2024-02-03 07:18:04       13 阅读
  3. Mysql事务隔离级别及其底层原理

    2024-02-03 07:18:04       37 阅读
  4. MySQL事务原理与优化最佳实践

    2024-02-03 07:18:04       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-03 07:18:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-03 07:18:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-03 07:18:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-03 07:18:04       18 阅读

热门阅读

  1. PyQt子线程处理业务事件

    2024-02-03 07:18:04       31 阅读
  2. Ubuntu 安装 Docker 详细步骤

    2024-02-03 07:18:04       32 阅读
  3. nuxt.js中使用axios以及二次封装

    2024-02-03 07:18:04       28 阅读
  4. WPF简介

    WPF简介

    2024-02-03 07:18:04      30 阅读
  5. LED显示屏在XR虚拟拍摄中的应用及前景

    2024-02-03 07:18:04       28 阅读
  6. 数据聚类:一种有效的数据分析技术

    2024-02-03 07:18:04       32 阅读
  7. 【gcc】webrtc发送侧 基于丢包更新码率

    2024-02-03 07:18:04       35 阅读
  8. uniapp实现自定义底部tab栏

    2024-02-03 07:18:04       30 阅读
  9. QT中的QImage与QPixmap区别

    2024-02-03 07:18:04       29 阅读
  10. webpack详解

    2024-02-03 07:18:04       27 阅读