【事务隔离级别】——三步了解数据库的事务隔离级别

简介:  要了解事务的隔离级别,推荐您从以下三个步骤来了解。

 要了解事务的隔离级别,推荐您从以下三个步骤来了解。


事务的基本要素


 先简单复习一下事务的四个基本要素:ACID


 原子性:整个事务中的操作,要么全部完成, 要么全部不完成(全部撤销)。


 一致性:事务开始之前和结束之后,数据库的完整性没有遭到破坏。


 隔离性:在同一时间,只允许一个事务请求同一数据。


 持久性:事务完成以后,该事务对数据库所做的操作持久化在数据库中,并不会被回滚。


事务中经常出现的并发问题


 分析几个场景:


 脏读:一个事务读取了另一个事务操作但未提交的数据。

 比如A、B两个事务,都操作同一张表,A刚刚对数据进行了操作(插入、修改等)但还没有提交,这时B读取到了A刚刚操作的数据,因为A有可能回滚,所以这部分数据有可能只是临时的、无效的,即脏数据。


 不可重复读:一个事务中的多个相同的查询返回了不同数据。

 比如A、B两个事务,A中先后有两次查询相同数据的操作,第一次查询完之后,B对相关数据进行了修改,造成A事务第二次查询出的数据与第一次不一致。


 幻读:事务并发执行时,其中一个事务对另一个事务中操作的结果集的影响。

 比如A、B两个事务,事务A操作表中符合条件的若干行。事务B插入符合A操作条件的数据行,然后再提交。后来发现事务A并没有如愿对“所有”符合条件的数据行做了修改~~



SQL规范定义的四个事务隔离级别


 以上都是事务中经常发生的问题,所以为了兼顾并发效率和异常控制,SQL规范定义了四个事务隔离级别:


 Read uncommitted (读未提交):如果设置了该隔离级别,则当前事务可以读取到其他事务已经修改但还没有提交的数据。这种隔离级别是最低的,会导致上面所说的脏读


 Read committed (读已提交):如果设置了该隔离级别,当前事务只可以读取到其他事务已经提交后的数据,这种隔离级别可以防止脏读,但是会导致不可重复读和幻读。这种隔离级别最效率较高,并且不可重复读和幻读在一般情况下是可以接受的,所以这种隔离级别最为常用。


 Repeatable read (可重复读):如果设置了该隔离级别,可以保证当前事务中多次读取特定记录的结果相同。可以防止脏读、不可重复读,但是会导致幻读。


 Serializable (串行化):如果设置了该隔离级别,所有的事务会放在一个队列中执行,当前事务开启后,其他事务将不能执行,即同一个时间点只能有一个事务操作数据库对象。这种隔离级别对于保证数据完整性的能力是最高的,但因为同一时刻只允许一个事务操作数据库,所以大大降低了系统的并发能力。


 引用一张很经典的表格来按隔离级别由弱到强来标示为:


55.png


  并且隔离级别越高,并发性能越弱:


56.jpg


  前面的文章提到过,事务是由数据库连接所控制,并且只提供了两种事务提交模式:自动提交和手动提交,默认是自动提交(即把每个SQL语句的执行都当做是一个事务,每次执行完SQL语句都会立即将操作更新到数据库)。

  后面会总结并分享在多种环境下查看和设置事务隔离级别的方法。


 实践是检验真理的唯一标准!

相关文章
|
3月前
|
中间件 关系型数据库 Go
Go语言数据库编程:数据迁移与事务控制
本文介绍了《Go语言实战指南》中关于数据库编程的核心内容,涵盖使用 GORM 进行数据迁移与事务控制。主要内容包括:AutoMigrate 方法自动创建或更新表结构;事务控制的自动与手动实现方式;事务隔离级别的设置;以及在 Gin 框架中统一管理事务的实践建议。适合开发阶段的数据库结构管理和事务性操作需求。
|
6月前
|
SQL 数据库 索引
【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
|
9月前
|
SQL 存储 Java
数据库———事务及bug的解决
事务的一些概念,并发事务以及并发事务引起的bug,脏读,不可重复读,幻读,数据库中的隔离级别,事务的简单应用
|
11月前
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
165 3
|
11月前
|
存储 关系型数据库 数据挖掘
什么是数据库的事务隔离级别
【10月更文挑战第21】什么是数据库的事务隔离级别
251 1
|
11月前
|
存储 数据库 数据库管理
数据库事务安全性控制如何实现呢
【10月更文挑战第15天】数据库事务安全性控制如何实现呢
|
11月前
|
存储 数据库 数据库管理
什么是数据库事务安全性控制
【10月更文挑战第15天】什么是数据库事务安全性控制
|
11月前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗
|
11月前
|
SQL 关系型数据库 数据库
如何在数据库中实现事务控制呢
【10月更文挑战第15天】如何在数据库中实现事务控制呢
177 1
|
11月前
|
存储 SQL 关系型数据库
什么是数据库隔离级别
【10月更文挑战第15天】什么是数据库隔离级别

热门文章

最新文章