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

MySQL事务管理

MySQL事务管理

事务的概念

事务由一条或多条SQL语句组成,这些语句在逻辑上存在相关性,共同完成一个任务,事务主要用于处理操作量大,复杂度高的数据。比如转账就涉及多条SQL语句,包括查询余额(select)、在当前账户上减去指定金额(update)、在指定账户上加上对应金额(update)等,将这多条SQL语句打包便构成了一个事务。
MySQL同一时刻可能存在大量事务,如果不对这些事务加以控制,在执行时就可能会出现问题。比如单个事务内部的某些SQL语句执行失败,或是多个事务同时访问同一份数据导致数据不一致的问题。
因此一个完整的事务并不是简单的SQL集合,事务还需要满足如下四个属性:

  • 原子性: 一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,则会自动回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 隔离性: 数据库允许多个事务同时访问同一份数据,隔离性可以保证多个事务在并发执行时,不会因为由于交叉执行而导致数据的不一致。
  • 一致性: 在事务开始之前和事务结束以后,数据库的完整型没有被破坏,这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联型以及后续数据库可以自发性地完成预定的工作。
  • 持久性: 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。


简称ACID:

  • 原子性(Atomicity,又称不可分割性)。
  • 隔离性(Isolation,又称独立性)。
  • 一致性(Consistency)。
  • 持久性(Durability)。

事务的版本支持

事务的版本支持

通过show engines命令可以查看数据库引擎。

说明一下:

  • Engine: 表示存储引擎的名称。
  • Support: 表示服务器对存储引擎的支持级别,YES表示支持,NO表示不支持,DEFAULT表示数据库默认使用的存储引擎,DISABLED表示支持引擎但已将其禁用。
  • Comment: 表示存储引擎的简要说明。
  • Transactions: 表示存储引擎是否支持事务,可以看到InnoDB存储引擎支持事务,而MyISAM存储引擎不支持事务。
  • XA: 表示存储引擎是否支持XA事务。
  • Savepoints: 表示存储引擎是否支持保存点。

事务的提交方式

 autocommit的值为ON表示自动提交被打开,值为OFF表示自动提交被关闭,即事务的提交方式为手动提交。set autocommit = 1;

通过set命令设置autocommit全局变量的值,可以打开或关闭事务的自动提交。

使用begin或start transaction命令启动一个事务,右终端查看银行用户表中的信息。

使用begin或start transaction命令启动的事务,都必须要使用commit命令手动提交,数据才会被持久化,与是否设置autocommit无关。

  • 使用begin或start transaction命令,可以启动一个事务。
  • 使用savepoint 保存点命令,可以在事务中创建指定名称的保存点。
  • 使用rollback to 保存点命令,可以让事务回滚到指定保存点。
  • 使用rollback命令,可以直接让事务回滚到最开始。
  • 使用commit命令,可以提交事务,提交事务后就不能回滚了。

  • 脏读:指一个事务读取了另一个未提交事务修改的数据。例如,事务 A 修改了某条数据但未提交,此时事务 B 读取了该未提交的数据,如果事务 A 随后回滚,那么事务 B 读取到的数据就是无效的脏数据。
  • 不可重复读:指在一个事务内,多次读取同一数据时,得到的结果不一致。比如,事务 A 在第一次读取某条数据后,事务 B 对该数据进行了修改并提交,当事务 A 再次读取该数据时,得到的结果与第一次不同。

前者不考虑数据的提交状态直接读取最新数据,后者通过串行执行保证每次读取都是当前最新数据。而读提交和可重复读隔离级别则根据数据的状态和事务的操作类型,灵活地选择当前读或快照读,以在保证一定的数据一致性的同时,提高并发性能。

相关文章:

  • 3 版本控制:GitLab、Jenkins 工作流及分支开发模式实践
  • Kubernetes 深入浅出系列 | 容器剖析之容器安全
  • 链路聚合+vrrp
  • 写给新人的深度学习扫盲贴:ReLu和梯度
  • DocLayout-YOLO:通过多样化合成数据与全局-局部感知实现文档布局分析突破
  • 【Java内存区域有什么?每个区域有什么作用?】
  • 跨站脚本攻击(XSS)与跨站请求伪造(CSRF)的介绍、区别和预防
  • 程序化广告行业(74/89):行业发展驱动因素与未来展望
  • 帆软fvs文件中某表格新增数据来声提醒
  • Kotlin日常使用函数记录
  • JavaScript逆向工程实战:如何精准定位加密参数生成位置
  • 大模型学习七:‌小米8闲置,直接安装ubuntu,并安装VNC远程连接手机,使劲造
  • 国网B接口协议资源上报流程详解以及上报失败原因(电网B接口)
  • 嵌入式---灰度传感器
  • nginx镜像创建docker容器,及其可能遇到的问题
  • 通过 SSH 方式访问 GitHub 仓库
  • AI创业风向标:构建下一代「AI叙事创作平台」
  • 为什么在模型训练过程中,不同的张量(比如输入数据和模型参数)被放置在了不同的 GPU 设备上,而模型要求所有相关张量都在同一个设备上才能正确计算
  • AI日报 - 2025年4月10日
  • Django 生成PDF文件
  • 三站合一网站建设/如何查询域名注册人信息
  • 威海制作网站/百度公司的企业文化
  • 做家装网站客户来源多吗/站长工具查询系统
  • 怎么样才能把网站关键词做有排名靠前/营销策划思路
  • 拱墅网站建设/谷歌play商店
  • 建设信用卡中心网站首页/广州网站建设系统