数据库事务隔离级别定义

来源:互联网 发布:ubuntu 一直等待安装 编辑:程序博客网 时间:2024/05/19 14:19

数据库事务隔离级别定义

  • Read Uncommitted(可以读到未提交数据):
    • 如果一个事务已经开始读取数据,但是未提交,则另外一个事务无论是读还是写,都允许继续访问该数据;
    • 如果一个事务已经开始写数据,但是未提交,则另外一个事不允许同时进行写操作,但允许事务读此数据。

事务1(早发起,但仍未提交)

事务2(晚发起,但针对同一块数据)

读 →

读 √

写 √

写 →

读 √

写 ×


  • Read Committed(只能读到已提交数据):
    • 如果一个事务已经开始读取数据,但是未提交,则另外一个事务可以读该数据,也可以写该数据;
    • 如果一个事务已经开始写数据,但是未提交,则禁止其他事务写数据和读取该数据。

事务1(早发起,但仍未提交)

事务2(晚发起,但针对同一块数据)

读 →

读 √

写 √

写 →

读 ×

写 ×

 

  • Repeatable Read(可重复读取数据):
    • 如果一个事务已经开始读取数据,但是未提交,则另外的事务不允许同时写该数据,但允许读该数据;
    • 如果一个事务已经开始写数据,但是未提交,则禁止其他事务读或写该数据。

事务1(早发起,但仍未提交)

事务2(晚发起,但针对同一块数据)

读 →

读 √

写 ×

写 →

读 ×

写 ×

 

  • Serializable(序列化):
    • 事务只能一个接着一个地执行,不能并发执行。

事务1(早发起,但仍未提交)

事务2(晚发起,但针对同一块数据)

读 →

读 ×

写 ×

写 →

读 ×

写 ×

 

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed

它能够避免脏读取,而且具有较好的并发性能。

提高隔离级别会导致并发问题,在可能出现这类问题的场合,可以由应用程序采用悲观锁或乐观锁来控制。

0 0