数据库的事务(Transaction)

在数据库中,事务(Transaction) 是保证数据操作一致性和完整性的核心机制。它通过一组原子性的操作单元,确保所有操作要么全部成功(提交),要么全部失败(回滚)。以下是数据库事务的核心概念和实现细节:


1. 事务的ACID特性

数据库事务的核心特性由 ACID 定义:

  • 原子性(Atomicity)
    事务中的操作要么全部完成,要么全部不执行。
    示例:转账操作中,扣款和入账必须同时成功或失败。

  • 一致性(Consistency)
    事务执行后,数据库必须从一个一致状态转换到另一个一致状态。
    示例:转账前后,账户总额保持不变。

  • 隔离性(Isolation)
    多个并发事务的执行互不干扰,避免中间状态被其他事务看到。
    示例:事务A未提交时,事务B无法读取其修改的数据。

  • 持久性(Durability)
    事务提交后,对数据的修改永久保存,即使系统故障也不丢失。
    示例:事务提交后,数据写入磁盘,断电后仍可恢复。


2. 事务的生命周期

数据库事务的典型流程如下:

BEGIN TRANSACTION;  -- 开启事务
UPDATE account SET balance = balance - 100 WHERE id = 1;  -- 操作1
UPDATE account SET balance = balance + 100 WHERE id = 2;  -- 操作2
COMMIT;  -- 提交事务(若成功)
-- 或 ROLLBACK;  -- 回滚事务(若失败)

3. 事务的隔离级别

为了解决并发事务的冲突,数据库定义了不同隔离级别(从低到高):

隔离级别脏读不可重复读幻读典型场景
READ UNCOMMITTED✔️✔️✔️允许读取未提交数据(极少使用)
READ COMMITTED✔️✔️默认级别(如Oracle)
REPEATABLE READ✔️MySQL InnoDB默认级别
SERIALIZABLE完全串行化(高一致性,低并发)
  • 脏读(Dirty Read):读取到其他事务未提交的数据。
  • 不可重复读(Non-Repeatable Read):同一事务中多次读取同一数据结果不一致。
  • 幻读(Phantom Read):同一事务中多次查询返回的行数不同(新增/删除导致)。

4. 数据库事务的实现机制

(1)锁机制
  • 共享锁(Shared Lock, S锁)
    允许读取,阻止其他事务获取排他锁。
  • 排他锁(Exclusive Lock, X锁)
    阻止其他事务获取任何锁(用于写操作)。
(2)多版本并发控制(MVCC)
  • 通过保存数据的多个版本来实现非阻塞读(如MySQL InnoDB、PostgreSQL)。
  • 读操作访问旧版本数据,写操作生成新版本,避免读写冲突。
(3)日志机制
  • Redo Log:记录事务的物理修改,用于故障恢复。
  • Undo Log:记录事务的逻辑逆操作,用于回滚和MVCC。

5. 常见数据库的事务实现

MySQL(InnoDB引擎)
  • 默认隔离级别:REPEATABLE READ(通过MVCC避免幻读)。
  • 支持行级锁和间隙锁(Gap Lock)防止幻读。
PostgreSQL
  • 默认隔离级别:READ COMMITTED
  • 使用MVCC实现高并发,无锁读操作。
Oracle
  • 默认隔离级别:READ COMMITTED
  • 通过撤销段(Undo Segments)支持一致性读。

6. 事务的常见问题与优化

(1)长事务
  • 风险:占用锁资源,导致阻塞和性能下降。
  • 优化:拆分事务,避免长时间持有锁。
(2)死锁
  • 原因:多个事务互相等待对方释放锁。
  • 解决:数据库自动检测并回滚一个事务(如MySQL的innodb_deadlock_detect)。
(3)分布式事务
  • 场景:跨多个数据库或服务的操作(如银行跨行转账)。
  • 方案
    • 两阶段提交(2PC):协调者统一提交或回滚。
    • Saga模式:通过补偿操作回滚已完成的步骤。

7. 事务的最佳实践

  1. 尽量短小:减少锁的持有时间。
  2. 合理选择隔离级别:在一致性和性能间权衡。
  3. 避免跨服务事务:优先使用最终一致性(如消息队列)。
  4. 监控与日志:关注长事务和死锁日志。

总结

数据库事务是保障数据一致性的基石,理解其ACID特性、隔离级别及底层实现机制(锁、MVCC、日志)对优化应用性能至关重要。在实际开发中,需根据业务场景选择合适的事务策略,平衡一致性与并发性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025-05-27 Python深度学习7——损失函数和反向传播

文章目录 1 损失函数1.1 L1Loss1.2 MSELoss1.3 CrossEntropyLoss 2 反向传播 本文环境: Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 1 损失函数 ​ 损失函数 (loss function) 是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的"风险&…

python+tkinter实现GUI界面调用即梦AI文生图片API接口

背景 目前字节跳动公司提供了即梦AI的接口免费试用,但是并发量只有1,不过足够我们使用了。我这里想做个使用pythontkinter实现的GUI可视化界面客户端,这样就不用每次都登录官方网站去进行文生图片,当然文生视频,或者图…

#git 储藏库意外被清空 Error: bad index – Fatal: index file corrupt

问题:通常是由于 Git 的索引文件损坏导致 原因:系统崩溃或断电、硬盘故障、Git 操作错误等 方案:重建索引文件:将当前的索引文件重命名为其他名称或删除,比如 index.m,然后命令行重建索引,git…

GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

车载网关策略 --- 车载网关通信故障处理机制深度解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

Unity数字人开发笔记

开源工程地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758,开放这个源码 一、建立工程 建立Unity工程(UnityAiChat)拖入Unity-AI-Chat-Toolkit.unitypackage打开chatSample工程,可…

Cherry Studio连接配置MCP服务器

之前写了一篇关于Cherry Studio的文章,不了解的可以先看一下 AI工具——Cherry Studio,搭建满血DeepSeek R1的AI对话客户端【硅基流动DeepSeek API】-CSDN博客 最近Cherry Studio更新了一个新功能:MCP服务器 在 v1.2.9 版本中,…

OpenSSH 服务配置与会话保活完全指南

一、/etc/ssh/sshd_config 配置机制 1. 配置文件基础 文件作用 OpenSSH 服务器 (sshd) 的主配置文件,控制连接、认证、端口转发等行为。 加载与生效 修改后需重启服务:sudo systemctl restart sshd # Systemd 系统 sudo service ssh restart # S…

阿里云国际版注册邮箱格式详解

“为什么我的阿里云国际版注册总提示邮箱无效?” 这是许多初次接触阿里云国际版(Alibaba Cloud International)的用户常遇到的困惑。随着全球化进程加速,越来越多的企业选择阿里云国际版部署海外业务,而注册环节中邮箱…

【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号

问题: springboot本地启动应用报错: 程序包xxx不存在;找不到符号 解决方案: 1.确保用maven重新导入依赖 2.删除.idea文件夹 3.invalidate caches里,把能选择的都勾选上,然后清除缓存重启 4.再在上方工具栏…

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制 一、回绕处理函数 /** * Wrap a given time stamp, if there is an indication for an overflow * * param st stream // 传入一个指向AVStream结构体的指针,代表流信息 * pa…

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述

1 项目功能描述 # 智慧社区-小程序-1 欢迎页-加载后端:动态变化-2 首页-轮播图:动态-公共栏:动态-信息采集,社区活动,人脸检测,语音识别,心率检测,积分商城-3 信息采集页面-采集人数…

5.27 day 30

知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 一、导入官方库 我们复盘下学习py…

【GitHub Pages】部署指南

vue项目 编辑你的 vite.config.ts 文件,加上 base 路径,设置为你的 GitHub 仓库名 import { defineConfig } from vite import vue from vitejs/plugin-vue// 假设你的仓库是 https://github.com/your-username/my-vue-app export default defineConfi…

远程控制技术全面解析:找到适合你的最佳方案

背景:远程控制为何成为企业核心需求? 随着企业数字化转型的推进,远程控制技术已成为异地办公和运维的关键工具。无论是跨国企业需要高效管理全球设备,还是中小型企业追求经济高效的解决方案,选择合适的远程控制技术&a…

触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1

产品概述 触觉智能RK3506星闪开发板,型号IDO-EVB3506-V1采用 Rockchip RK3506(三核 Cortex-A7单核Cortex-M0, 主频最高1.5GHz)设计的评估开发板,专为家电显控、显示HMI、手持终端、工业IOT网关、工业控制、PLC等领域而设计。内置…

九级融智台阶与五大要素协同的量子化解析

九级融智台阶与五大要素协同的量子化解析 摘要:本文构建了一个量子力学框架下的九级融智模型,将企业创新过程映射为量子能级跃迁。研究发现五大要素协同态决定系统跃迁概率(P∣⟨Ψ_m∣H_协同∣Ψ_n⟩∣^2),当要素协同…

Kotlin学习34-data数据类1

定义如下:与普通类对比学习 //普通类 class NormalClass(val name: String, val age: Int, val sex: Char) //数据类 data class DataClass(val name: String, val age: Int, val sex: Char)对应找到java反编译的代码路径:Tool-->Kotlin-->Show K…

博图SCL基础知识-表达式及赋值运算

S7-1200 从 V2.2 版本开始支持 SCL 语言。 语言元素 SCL 除了包含 PLC 的典型元素(例如,输入、输出、定时器或存储器位)外,还包含高级编程语言表达式、赋值运算和运算符。 程序控制语句 SCL 提供了简便的指令进行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意义 海思3519V200是一款基于ARM架构的嵌入式芯片,广泛应用于智能安防、工业控制等领域。在这些应用场景中,对设备的图形用户界面(GUI)有着越来越高的要求。Qt5.8.0作为一个功能强大、跨平台的GUI开发框架,能够帮助开发者快速开发出美观、高效的用户界面。…