DBMS 中的隔离性2024年8月28日 | 阅读 4 分钟 引言隔离性是数据库级别的特性,它决定了修改如何以及何时发生,以及这些修改是否对其他用户、系统和其他数据库可见。隔离性的目的之一是允许许多事务并发运行而不相互干扰。 隔离性是数据库事务属性的必要条件。它是 ACID(原子性、一致性、隔离性、持久性)的第三项标准属性,确保了数据的正确性和准确性。 ACID为了维护数据库的一致性,“ACID 属性”在事务之前和之后都会得到遵循。 - 原子性
原子性与 DBMS 中的 ACID 属性相关,它指的是数据保持原子的概念。 这意味着对数据进行的任何操作都必须完全完成,或者根本不完成。它还表明操作不应被中断或仅完成一半。在处理事务时,操作应完全完成,而不是部分完成。 如果任何操作未完成,则取消该事务。当另一个优先级更高的操作进入时,当前操作可能会被执行。这会终止当前操作并导致其被中止。 - 一致性
此 ACID 属性将确保火车剩余座位数加上用户预订的座位数等于火车的总座位数。每个事务都以一致性测试结束,以确保没有出错。 - 耐用性
DBMS 中的“持久性”指的是这样一个概念:如果一项操作成功完成,数据库将永远保留在磁盘上。数据库的弹性应允许其在系统发生故障或崩溃时继续运行。 恢复管理器负责在数据库丢失的情况下保证数据库的长期生存能力。每次我们进行更改时,都必须使用 COMMIT 命令来提交值。 - 隔离
隔离性被称为一种分离状态。DBMS 的隔离功能确保多个事务可以同时进行,并且一个数据库的数据不应对另一个数据库产生影响。换句话说,数据库第二状态上的过程将在第一状态上的操作完成后开始。
定义隔离级别的现象 - 读取尚未提交数据的事务称为执行了“脏读”。想象一下,当事务 2 接收到修改后的行时,事务 1 修改了该行并将其保留未提交。如果事务 1 撤消了更改,事务 2 将读取从未打算存在的数据。
- 不可重复读发生在事务两次读取同一行但每次都得到不同值的情况下。假设事务 T1 读取数据。由于并发,另一个事务 T2 修改并提交了相同的数据。如果事务 T1 第二次读取相同的数据,它将获得一个不同的值。
- 当执行两个相同的查询但返回的行不同时,这种现象称为“幻读”。假设事务 T1 接收到一组满足某些搜索条件的记录。现在事务 T2 创建了一些符合事务 T1 搜索条件的新数据。如果事务 T1 重新执行读取行的语句,它将获得一组不同的行。
SQL 标准基于这些现象定义了四种隔离级别 隔离级别 隔离分为四个阶段。更高的隔离会限制用户同时访问相同数据的能力。隔离级别越高,所需的系统资源越多,数据库事务相互阻塞的可能性就越大。 - “可串行化”是最高级别,表示一个事务必须在另一个事务开始之前完成。
- 可重复读允许在事务开始后访问它们,即使它们尚未完成。此级别允许幻读或感知插入或删除的行,即使对现有行的更改是不可读的。
- 读已提交允许您在数据已提交到数据库后才能访问信息。
- 读未提交是最低的隔离级别,允许在执行修改之前访问数据。
用户越容易遇到读取现象,例如未提交的依赖关系,也称为脏读,即从已被另一用户修改但尚未提交到数据库的行中读取数据,并且隔离级别越低。
|