当前位置: 首页 > news >正文

MySQL:事务管理

目录

事务

事务的四大特性

事务提交方式

手动提交

自动提交

事务隔离级别

READ UNCOMMITTED(读未提交)

READ COMMITTED(读已提交)

REPEATABLE READ(可重复读)

SERIALIZABLE(可串行化)


事务

事务是指一组逻辑上被视为一个整体的数据库操作,它们要么全部成功执行,要么全部失败回滚,以保证数据库的一致性、完整性和可靠性。

一个MySQL数据库可能会有多个事务在运行,就有可能在同一时刻对同一张表进行访问,在不加保护的情况下就会出现问题,有了事务就能保证语句要么成功执行,那么失败回滚

在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务,MyISAM不支持

事务的四大特性

  • 原子性:事务中的所有操作要么全部成功,要么全部不执行。如果其中任何一个操作失败,整个事务会被回滚到事务开始前的状态。
  • 一致性:事务执行前后,数据库必须保持一致状态,所有规则和约束都必须得到满足。
  • 隔离性:并发事务之间相互隔离,一个事务的中间状态对其他事务不可见,以防止脏读、不可重复读和幻读等问题。
  • 持久性:一旦事务成功提交(Commit),即使系统发生故障,数据也会被永久保存。

事务提交方式

事务可以分成手动提交自动提交两种模式

手动提交

START TRANSACTION;  -- 或 BEGINUPDATE ...;INSERT ...;DELETE ...;
COMMIT;             -- 或 ROLLBACK;

特点:

  • 多个语句组成一个原子单元,全部成功或全部撤销。

自动提交

默认状态:autocommit = 1

特点:

  • 语句执行成功即自动COMMIT,失败则自动ROLLBACK
  • 不需要显式写START TRANSACTION / COMMIT

事务隔离级别

MySQL(InnoDB)支持四种标准的事务隔离级别,用来控制并发事务之间互相“看见”对方数据的程度。隔离级别越高,并发副作用越少,但性能越低;反之亦然。

READ UNCOMMITTED(读未提交)

允许事务读取尚未提交的“脏”数据。速度最快,但脏读、不可重复读、幻读都可能发生,实际生产极少使用。

脏读指的是读到另一个事务尚未提交的数据。

不可重复读同一事务内两次读同一行,得到不同结果。

幻读同一事务内两次范围查询,行数变多/变少

READ COMMITTED(读已提交)

一个事务只能读到其他事务已经提交的数据,避免了脏读;仍会出现不可重复读和幻读。

REPEATABLE READ(可重复读)

这是 InnoDB 默认的一种隔离级别

事务开始后,同一个查询语句无论执行多少次,看到的数据版本保持一致,解决了脏读和不可重复读;在 InnoDB 里通过间隙锁把幻读也几乎消除,因此比标准定义更严格。

SERIALIZABLE(可串行化)

完全串行化执行事务,像单线程一样排队跑,所有并发副作用都不存在,但吞吐量最低,只有在极端强一致场景才考虑。

查看当前会话的隔离级别:
select @@session.transaction_isolation;

修改当前会话的隔离级别:
set session transaction isolation level read committed;

设置全局隔离级别:
set global transaction isolation level repeatable read;


http://www.xdnf.cn/news/1351765.html

相关文章:

  • Intel RealSense D435 深度相机详解
  • Java 学习笔记(基础篇8)
  • Linux总线设备驱动模型深度理解
  • Vue3 学习教程,从入门到精通,基于 Vue 3 + Element Plus + ECharts + JavaScript的51购商城项目(45)
  • imx6ull-驱动开发篇37——Linux MISC 驱动实验
  • 大模型四种常见安全问题与攻击案例
  • MySQL数据库管理与索引优化全攻略
  • 力扣(全排列)
  • 使用 PSRP 通过 SSH 建立 WinRM 隧道
  • Linux-常用文件IO函数
  • jQuery 知识点复习总览
  • (nice!!!)(LeetCode 面试经典 150 题) 173. 二叉搜索树迭代器 (栈)
  • 55 C++ 现代C++编程艺术4-元编程
  • 数据结构与算法-字符串、数组和广义表(String Array List)
  • 【Tech Arch】Apache Flume海量日志采集的高速公路
  • 解码LLM量化:深入剖析最常见8位与4位核心算法
  • Mac相册重复照片终结指南:技术流清理方案
  • chromadb使用hugging face模型时利用镜像网站下载注意事项
  • Node.js特训专栏-实战进阶:23. CI/CD流程搭建
  • 通过官方文档详解Ultralytics YOLO 开源工程-熟练使用 YOLO11实现分割、分类、旋转框检测和姿势估计(附测试代码)
  • 优先使用 `delete` 关键字删除函数,而不是将函数声明为 `private` 但不实现 (Effective Modern C++ 条款11)
  • 2025年Java在中国开发语言排名分析报告
  • 深度学习之PyTorch框架(安装,手写数字识别)
  • Redis 从入门到实践:Python操作指南与核心概念解析
  • Redis全面详解:从配置入门到实战应用
  • 联邦学习之----联邦批量归一化(FedBN)
  • 非线性规划学习笔记
  • 【KO】前端面试题一
  • 浮点数比较的致命陷阱与正确解法(精度问题)
  • 【Linux】深度学习Linux下的包管理器yum/apt