当前位置: 首页 > 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.dtcms.com/a/347634.html

相关文章:

  • games101 作业0 环境搭建与熟悉线性代数库
  • H264编解码过程简述
  • 数据结构 -- 哈希表
  • RAGFlow (一) 开发环境搭建
  • imx6ull-驱动开发篇37——Linux MISC 驱动实验
  • [机械结构设计-18]:Solidworks - 特征(Feature)是构成三维模型的基本单元,是设计意图的载体,也是参数化设计的核心。
  • 深入剖析分布式事务的Java实现:从理论到Seata实战
  • c语言中enum与#define的用法区别
  • 算法题(189):食物链
  • 如何利用数据库事务,来防止数据不一致的问题
  • 云原生概述
  • [e3nn] 归一化 | BatchNorm normalize2mom
  • 自然语言处理——06 迁移学习(上)
  • MATLAB实现CNN-LSTM-Attention 时序和空间特征结合-融合注意力机制混合神经网络模型的风速预测
  • 云计算-K8s 运维:Python SDK 操作 Job/Deployment/Pod+RBAC 权限配置及自定义 Pod 调度器实战
  • Kubernetes相关问题集(四)
  • 「数据获取」《贵港统计年鉴》(2008-2023)(2016、2017缺失)(获取方式看绑定的资源)
  • 开发指南134-路由传递参数
  • 【KO】前端面试七
  • 科研笔记:博士生手册
  • n8n热门的开源 AI 工作流平台实操
  • git实战(7)git常用命令速查表
  • C++实现常见的排序算法
  • STM32窗口看门狗(WWDG)深度解析:精准守护嵌入式系统的实时性
  • day39-keepalived
  • How to Use Managed Identity with ACS?
  • 全面解析主流AI模型:功能对比与应用推荐
  • douyin_search_tool:用python开发的抖音关键词搜索采集软件
  • 低功耗全双工远距离无线对讲解决方案
  • 【数位DP】D. From 1 to Infinity