DBMS 中的不同事务隔离级别是什么?
在事务的情况下,术语 ACID 被大量使用来陈述事务必须遵循的一些重要属性。我们都知道 ACID 代表原子性、一致性、隔离性和持久性,这些属性统称为 ACID 属性。
事务的属性
数据库系统确保 ACID 属性 -
原子性 - 事务操作要么全部完成,要么全部不完成。
一致性 - 事务从一个一致(正确)状态转换到另一个一致状态。
隔离性 - 一个事务与其他事务隔离。即一个事务不受另一个事务的影响。尽管多个事务并发执行,但它必须看起来好像事务是串行执行的(一个接一个)。
持久性 - 事务的结果是永久的,即结果不会因后续故障而丢失,持久性指的是持久性,即永久性。
隔离性
它确定其他系统的交易的可见性。较低的级别允许每个用户访问相同的数据。因此,它涉及到系统数据隐私和安全的高风险。但是,较高的隔离级别减少了对数据的并发类型,但需要更多资源并且比较低的隔离级别慢。
隔离协议有助于保护数据免受不需要的事务的影响。它们通过定义一个操作所做的更改何时以及如何对其他操作可见来维护每个数据的完整性。
隔离级别
下面解释了四个隔离级别 -
读取未提交 - 这是最低级别的隔离。在此级别;允许脏读,这意味着可以读取另一个事务未提交的更改。
读取已提交 - 它不允许脏读,并明确说明任何未提交的数据现在已提交,现在已读取。
可重复读 - 这是最受限制的隔离级别。事务在其引用的所有行上持有读锁,在其更新/插入/删除的所有行上持有写锁。因此,没有不可重复读取的可能性。
可串行化 - 最高级别的文明。它确定所有并发事务都应串行执行。
示例
考虑一个隔离的例子。
事务 E 的隔离级别是什么?
session begins
设置全局事务
隔离级别可串行化;
session ends session begins
设置会话事务
隔离级别可重复读;
transaction A transaction B
设置事务
隔离级别读取未提交;
transaction C
设置事务
隔离级别读取已提交;
transaction D transaction E session ends
检查哪个选项 -
A- Serializable B- Repeatable read C- Read uncommitted
解决方案
可重复读是正确的答案。
原因和解释
步骤 1 - 在上面的程序中,第一个会话开始并结束,而没有执行任何事务。
步骤 2 - 第二个会话在会话级别以隔离级别“可重复读”开始。事务 A 和 B 使用这些设置执行。
步骤 3 - 再次,一个新的事务以隔离级别“读取未提交”开始。此设置仅用于“事务 C”,因为仅提到了“设置事务”。如果使用“设置事务”而不使用全局或会话关键字,则这些特定设置仅适用于单个事务。
步骤 4 - 再次,“设置事务”以及隔离级别读取已提交仅适用于事务 D。(请参阅步骤 3 以了解原因)
步骤 5 - “事务 E”在“可重复读”中继续,因为在步骤 2 中开始的事务尚未结束。步骤 3 和步骤 4 中设置的事务隔离级别在执行单个事务后消失。因此,自动“事务 E”将参考先前的事务设置。