事务的隔离级别

本文记录MySQL学习过程中遇到的事务的隔离级别~

数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况:

1.read uncommitted读未提交:一个事务读到另一个事务没有提交的数据;

  • 存在:3个问题;
  • 解决:0个问题。

2.read committed读已提交:一个事务读到另一个事务已经提交的数据;

  • 存在:2个问题(不可重复读,虚读);
  • 解决:1个问题(脏读)。

3.repeatable read可重复读:在一个事务中读到的数据始终保持一致,无论另一个事务是否提交;

  • 存在:1个问题(虚读);
  • 解决:2个问题(脏读、不可重复读)。

4.serializable串行化:同时只能执行一个事务,相当于事务中的单线程。

  • 存在:0个问题;
  • 解决:3个问题(脏读、不可重复读、虚读)。

安全性和性能对比:

  • 安全性:serializable>repeatable read>read committed>read uncommitted
  • 性能:serializable<repeatable read<read committed<read uncommitted

常见数据库的默认隔离级别:

  • MySQL:repeatable read;
  • Oracle:read committed。

标签: none