数据库并发与并发异常

简介: 数据库并发与并发异常

在使用数据库来支撑业务系统时,随着用户量的增大,经常会遇到同时读取相同数据的情况,在没有进行并发控制的情况下就会遇到各种各样的问题,对于可能出现的问题我们要有所了解。

一、什么是并发

并发指的是在同一时间,有多个程序都处在启动运行到运行完毕之间的状态,并且都在同一个处理机上运行。

对于数据库来说,数据库并发指的就是在同一时间内,有多个事务都处在开始到提交之间的状态,并都在同一个数据库服务中。

二、常见并发异常

有关于事务的特性可参考前一篇文章:数据库事务与特性。假设不做任何的并发控制,让那些对数据的操作自由执行,将会遇到下列的问题:

1. 脏读

脏读指的是一个事务A在运行时读取了另一个失败事务B未提交的数据,这就导致事务B回滚后,事务A读取到了一个与数据库记录冲突的错误数据。

数据库中某条数据的money值为20,在处理过程中,事务B修改值为100,随后被事务A读取,接下来事务B因为其他环节的错误导致回滚,money的值被还原为20,这时事务A所读取的数据即为脏数据(错误数据)。

2. 脏写

脏写指的是一个事务A一同回滚了另外一个事务B已经提交的数据,这将导致事务B已经执行成功的操作一同被回滚。

事务B先于事务A执行成功,但随后事务A回滚,将事务B的提交内容一同回滚。

3. 更新丢失

更新丢失指的是事务A与事务B均提交成功,但是由于读取和写入的时间点问题,导致事务B的修改结果好像未生效一样。

最初数据库中money的值为20,在事务B提交成功后money的值为40,按正常逻辑事务A将money的值减去20,结果应为20,但对事务A来说读取到的值为20,导致最后结果为0

4. 不可重复读

不可重复读指的是由于另外一个事务B对数据的操作,导致事务A前后两次读取到的结果不一致。与脏读的主要区别是:一个读取的是后来被回滚的数据,一个读取的是已经成功提交后的数据,但前后并不一致。

5. 幻读

幻读指的是读取某个范围的数据时,因为有其他事务的操作导致前后两次的查询结果不同。不可重复读与幻读的主要区别在于不可重复读是一条具体数据的不一致,幻读是对一组数据的前后不一致。

在事务B执行前,事务A得到的结果集为:1,3,4,7,在事务B插入一个新的账户:8后,事务A得到的结果集为:1,3,4,7,8

目录
相关文章
|
6月前
|
Kubernetes 关系型数据库 MySQL
ChaosBlade常见问题之数据库进行故障注入报错ibdata1文件异常如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
134 1
|
6月前
|
SQL 关系型数据库 数据库
事务隔离级别:保障数据库并发事务的一致性与性能
事务隔离级别:保障数据库并发事务的一致性与性能
|
17天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
38 2
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
181 10
|
1月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
26天前
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
109 0
|
6月前
|
存储 安全 算法
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
【软件设计师备考 专题 】数据库的控制功能(并发控制、恢复、安全性、完整性)
123 0
|
4月前
|
存储 关系型数据库 MySQL
数据库并发问题17
【7月更文挑战第17天】数据库并发问题
41 3
|
6月前
|
SQL 关系型数据库 MySQL
关系型数据库的并发处理能力限制
【5月更文挑战第3天】关系型数据库的并发处理能力限制
92 8
关系型数据库的并发处理能力限制