数据库事务特性及事务隔离级别

一、数据库事务基本知识

1.数据库事务:要么全部成功,要么全部失败。

2.数据库事务特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabiliy)。简称ACID。

原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功,整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始状态。

一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。如A转账100元给B,不管操作是否成功,A和B的账户总额是不变的。

隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰

持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。

3.数据库管理系统采用数据库锁机制来保证事务的隔离性。(类似于java程序采用对象锁机制进行线程同步)

当多个事务试图对相同数据进行操作时,只有持有锁的事务才能操作数据。

Oracle数据库还采用了数据版本机制,为每个变化保存一个版本。

二、数据并发问题

数据库中的数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性。

1.脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作。如果恰巧B事务回滚,那么A事务读取到的数据是根本不被承认的。

2.不可重复读:A事务读取了B事务已经提交的更改数据。

3.幻读:A事务读取了B事务已经提交的新增数据。

4.第一类丢失更新。A事务撤销时,把已经提交的B事务的更新数据覆盖了

5.第二类丢失更新。A事务覆盖B事务已经提交的数据,造成B事务所做的操作丢失。

 操作示例:https://juejin.im/post/5d8b2a9c518825091471fe2c

三、事务隔离级别

事务隔离级别:READ_UNCOMMITED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE

不同的事务隔离级别会导致不同的并发问题。

 一般来说,READ_UNCOMMITED拥有最高的并发量和吞吐量。而SERIALIZABLE的并发性最低。。

 

参考自《spring 4.x--企业应用开发实战》

posted on   乐之者v  阅读(452)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示