数据库的事务隔离级别

本文介绍了数据库事务的四大特性:原子性、一致性、隔离性和持久性,并详细解释了如果不考虑隔离性可能产生的问题,如丢失更新、脏读、不可重复读及幻读。还对比了四种不同的事务隔离级别:读未提交、不可重复读、可重复读和串行化的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天接到了一个电话面试,面试官问到了事务的隔离级别,之前在使用数据库时,我从未考虑过事务的并发控制相关的知识。始终觉得我使用了事务,那么事务就应该如我所期望的一样,保证数据之间的一致性。面试结束后,我也去查询了相关资料,了解了数据库事务隔离相关的知识,现在就和大家分享一下:

事务的特性:

  我们都知道,事务应当具有以下特性:

 1. 原子性:事务不可分割 
 2. 一致性:事务执行的前后,数据完整性保持一致.
 3. 隔离性:一个事务执行的时候,不应该受到其他事务的打扰
 4. 持久性:一旦结束,数据就永久的保存到数据库.

不考虑隔离性产生的事务并发问题:

  原子性和一致性大多数人都应经很熟悉了,本文将重点围绕隔离性来总结。如果我们不考虑事务隔离性,则会产生以下现象:

  1. 丢失更新:两个事务同时更新一行数据,最后一个事务的更新会覆盖掉第一个事务的更新,从而导致第一个事务更新的数据丢失,这是由于没有加任何锁造成的;
  2. 脏读:一个事务读到另一个事务未提交数据,后一个事务如果操作失败进行了回滚,前一个事务读取的就是错误数据,这样就造成了脏读。
  3. 不可重复读: 事务 A 多次读取同一数据,事务 B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。关注点在于修改。
  4. 虚读(幻读):一个事务多次读取一组数据,另一个事务在第一个事务的两次读取操作之间提交了数据(insert),导致一个事务两次查询结果条数不一致。关注点在于新增和删除,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

事务隔离级别:

数据库提供了四种事务隔离级别:

事务隔离级别丢失更新不可重复读脏读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

1. 读未提交:
   一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据,该隔离级别可以通过“排他写锁”实现。解决了丢失更新的问题。这可能会造成脏、不可重复、幻读现象
2. 不可重复读(sqlServer、Oracle默认级别):
  事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变(不可重复读)。可防止脏读,但不可重复读和幻读仍可发生
3. 可重复读(MySql默认级别):
  在开始读取数据(事务开启)时,不再允许修改操作,这可以通过“共享读锁”和“排他写锁”实现。可防止脏读、不可重复读,但幻读仍可发生
4. 序列化:
  事务隔离的最高级别,提供严格的事务隔离,它要求事务串行执行,事务只能一个接着一个地执行,但不能并发执行。会引发超时和锁竞争,耗资源多、损失并行度、性能低,一般不用

  总结:如果仅仅把事务级别设为最高,就会带来并发的性能问题,因此,如果使用好事务隔离级别是一门很深的学问

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值