DBMS 中有哪些不同的事务隔离级别?
在事务的情况下,术语ACID已被大量使用来说明事务必须遵循的一些重要属性。我们都知道ACID代表原子性、一致性、隔离性和持久性,这些属性统称为ACID属性。
交易属性
数据库系统确保ACID属性-
原子性-事务操作全部完成或不完成。
一致性-事务从一个一致(正确)状态转移到另一个一致状态。
隔离-事务与其他事务隔离。即一个事务不受另一个事务的影响。尽管多个事务并发执行,但它必须看起来好像事务是串行运行的(一个接一个)。
Durability-交易的结果是永久性的,即结果永远不会因随后的失败而丢失,耐久性是指持久性,即永久性。
隔离
它决定了其他系统交易的可见性。较低的级别允许每个用户访问相同的数据。因此,它涉及到系统的数据隐私和安全的高风险。但是,较高的隔离级别会降低数据的并发类型,但需要更多的资源并且比较低的隔离级别更慢。
隔离协议有助于保护数据免受不需要的事务的影响。它们通过定义一项操作所做的更改如何以及何时对其他操作可见,从而维护每个数据的完整性。
隔离级别
有四个隔离级别,如下所述-
ReadUncommitted-这是最低级别的隔离。在这个级别;允许脏读,这意味着一个人可以读取另一个人所做的未提交的更改。
已提交读-它不允许脏读,并明确指出任何未提交的数据现在已被提交。
可重复读取-这是最受限制的隔离级别。事务在它引用的所有行上持有读锁,并在它更新/插入/删除的所有行上持有写锁。因此,不存在不可重复读取的机会。
Serializable-最高级别的文明。它决定所有并发事务都串行执行。
示例
考虑一个隔离的例子。
事务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”,因为单独提到了“设置事务”。如果在没有全局或会话关键字的情况下使用“SET事务”,那么这些特定设置将仅适用于单个事务。
第4步-再次“设置事务”,隔离级别读取提交仅适用于事务D。(原因请参阅第3步)
步骤5-“事务E”在“可重复读取”处继续,因为在步骤2开始的事务还没有结束。一旦执行单个事务,在步骤3和步骤4中设置的事务隔离级别就会消失。因此,自动“交易E”将参考先前的交易设置。