什么是数据库隔离级别?它们有什么作用?-CSDN博客

109 阅读1分钟

数据库隔离性允许事务在执行时,好像没有其他并发运行的事务存在一样。

下面的图示演示了四个隔离级别。e934bb337b63d4f2f781e3fa66e482fc.jpeg

🔹Serializable(可串行化):这是最高的隔离级别。并发事务保证按顺序执行。

🔹Repeatable Read(可重复读):事务期间读取的数据与事务开始时相同。

🔹Read Committed(已提交读):只能在事务提交后读取数据修改。

🔹Read Uncommitted(未提交读):在事务提交前,数据修改可以被其他事务读取。

隔离性由MVCC(多版本一致性控制)和锁定保证。

上面的图示以可重复读为例,演示了MVCC如何工作:

对于每一行,都有两个隐藏的列:transaction_id和roll_pointer。当事务A开始时,将创建一个transaction_id = 201的新Read View。不久之后,事务B开始,创建一个transaction_id = 202的新Read View。

现在,事务A将余额修改为200,创建了一行新的日志记录,并且roll_pointer指向旧的行。在事务A提交之前,事务B读取了余额数据。事务B发现事务ID 201未提交,因此它读取下一个提交的记录(transaction_id = 200)。

即使事务A提交后,事务B仍然根据事务B开始时创建的Read View读取数据。因此,事务B始终读取余额为100的数据。