美文网首页C++ 面经
数据库ACID、脏读、不可重复读和幻读

数据库ACID、脏读、不可重复读和幻读

作者: 乔大叶_803e | 来源:发表于2020-03-25 17:23 被阅读0次

概念

一个数据库事务通常包含了一个序列的对数据库的读/写操作

事务存在目的

为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

事物的执行过程

当一个事务被提交给了DBMS(数据库管理系统)

要么全执行,要么全都不执行

该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行

产生的便利性

为了当应用程序访问数据库的时候

事务能够简化我们的编程模型

不需要我们去考虑各种各样的潜在错误和并发问题

事务本质上是为了应用层服务的.而不是伴随着数据库系统天生就有的

使用事务时,要么提交,要么回滚, 我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办的问题

数据库事务的四大特性(ACID)

  • 原子性(Atomicity)

事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行
记录之前的版本,允许回滚

  • 一致性(Consistency)

事务应确保数据库的状态从一个一致状态转变为另一个一致状态。 一致状态的含义是数据库中的数据应满足完整性约束

从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态

事务开始和结束之间的中间状态不会被其他事务看到

  • 隔离性(Isolation)

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

由于多个事物可能操作同一个资源,不同的事物为了保证隔离性,会有很多锁方案

适当的破坏一致性来提升性能与并行度 例如:最终一致~=读未提交

  • 持久性(Durability)

一个事务一旦提交,他对数据库的修改应该永久保存在数据库中

脏读(dirtyRead)

脏读是指的一个事物正在访问数据,并且对数据进行了修改,

而且这种修改还没有提交到数据库中

这时,另一个事物也访问这个数据 ,然后使用了这个数据

因为这个数据还没有提交数据,那么另外一个事物读到的这个数据就是脏数据

不可重复读

不可重复读针对的是同一个主键的数据。

在同一事务中,两次读取同一数据(同一主键),得到内容不同

虚读(幻读)

同一事务中,用同样的操作读取两次,得到的记录数不相同

幻读针对的是一批数据两次读取中,有新增或者减少

三者的区别

针对点

幻读针对的是一批数据两次读取中,有新增或者减少

不可重复读针对的是同一个主键的数据。

脏读针对读取了未提交数据

相关文章

  • mysql基础概念

    MySQL 1 数据库事务的特性(ACID) 2 脏读 幻读 不可重复读 3 事物隔离级别 4 ...

  • spring事务传播机制

    理解spring事务,就要理解数据库ACID的Isolation,隔离性。 脏读、不可重复读、幻读 这几种场景都是...

  • 数据库事务隔离级别

    数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)

  • 面试题

    1、什么是数据库事务,事务的特性有哪些,事务ACID特性的实现原理,事务的隔离级别,什么是脏读、不可重复读、幻读呢...

  • MySQL事务详解

    一:什么是事务 二:事务的特性(ACID) 三:脏读、丢失修改、不可重复读、幻读 不可重复读的重点是修改:多次读取...

  • 数据库事务隔离级别

    脏读 不可重复读 幻读

  • 03 | 事务:MySQL的事务隔离和隔离实现

    事务的4大特性ACID 数据库多个事务同时执行的时候可能出现1.脏读2.不可重复读3.幻读 事务隔离越严实,效率越...

  • MySQL Innodb 事务隔离级别

    Reference 事务并发的可能问题与其解决方案脏读、幻读、不可重复读和丢失更新数据库并发事务存在的问题(脏读、...

  • SQL 多个事务并发时可能遇到的问题

    Reference 事务并发的可能问题与其解决方案脏读、幻读、不可重复读和丢失更新数据库并发事务存在的问题(脏读、...

  • 数据库事务和隔离级别笔记

    1. 四个属性 ACID 2. 三种问题(严重级别依次降低) 脏读,不可重复读, 幻读 严重<------>不严重...

网友评论

    本文标题:数据库ACID、脏读、不可重复读和幻读

    本文链接:https://www.haomeiwen.com/subject/hesxuhtx.html