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

【MySQL进阶之路 | 高级篇】显式事务和隐式事务

使用事务有两种方式:显式事务和隐式事务。

1. 显式事务

步骤1:

START TRANSACTION或者BEGIN,作用是显式开启一个事务。

START TRANSACTION语句相较于BEGIN特别之处在于,后面能跟几个修饰符。比如:

  • READ ONLY:标识当前事务是一个只读事务,也就是属于该事务的数据库操作只能读取数据,而不能修改数据。注意:只读事务中只是不允许修改那些其他事务也能访问到的表中的数据,对于临时表来说,由于它们只能在当前会话可见,所以只读事务其实也是可以对临时表做DML操作的。
  • READ WRITE(默认情况)标识当前事务是一个读写事务,也就是属于该事务的数据库操可以写入数据,也可以读取数据。
  • with consistent snapshot:启动一致性读。

read only和read write是用来设置所谓的事务访问模式的,就是以只读还是读写的方式来访问数据库的数据,一个事务的访问模式不能同时设置为只读和读写。所以不能把read only和read write放在START TRANSACTION后。

步骤2:

一系列事务中的操作(主要是DML,不含DDL)

步骤3:

提交事务或中止事务(回滚事务)。

提交事务:COMMIT;

回滚事务,撤销正在进行的所有没提交的修改:ROLLBACK;

回滚到保存点:rollback to savepoint;

在事务中创建保存点,方便以后对保存点进行回滚。一个事务可以存在多个保存点:savepoint 保存点名称;

删除某个保存点:release savepoint 保存点名称;

2. 隐式事务

MySQL中有个系统变量autocommit.默认开启(autocommit=on),DML操作是个独立的事务,自动提交。

可以关闭自动提交。

  • set autocommit=false
  • 在autocommit=true前提下,使用START TRANSACTION开启事务,那么DML操作不会自动提交数据。

3. 隐式提交数据情况

  • DDL操作。数据库对象,指的就是数据库,表,视图,存储过程等结构。当我们使用CREATE,ALTER,DROP等语句去修改数据库对象时,就会隐式的提交前边语句所属于的事务。
  • 隐式使用或修改MySQL数据库中的表。当我们使用ALTER USER,CREATE USER,DROP USER,RENAME USER,REVOKE,SET PASSWORD等语句时会隐式的提交前边的语句所属于的事务。
  • 事务控制或关于锁定的语句:当我们在一个事务还没提交或者回滚时就又使用START TRANSACTION或者BEGIN语句开启了另一个事务时,会隐式提交上一个事务。当前的autocommit系统变量的值为OFF,手动调为ON时,也会隐式的提交。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • electron 网页TodoList应用打包win桌面软件数据持久化
  • 00-从零开始安装Oracle19c之数据库安装规划
  • 这款ERP云进销存系统,直接封神
  • 【排序】快速排序详解
  • 《学会 SpringMVC 系列 · 基础篇》
  • 华为OD机试 - Wonderland游乐园 - 动态规划(Java 2024 D卷 200分)
  • 遥感领域新方向!Mamba+RS论文汇总!
  • Undertow详解
  • Spring Boot:SpringBoot入门
  • DHCP与DNS的配置
  • 【屏显MCU】多媒体接口总结
  • LNMP动态网站环境部署
  • Javascript中canvas与svg详解
  • LLM评估 | 大模型评估方法调研--论文解读(持续更新ing!!!)
  • iexcel-excel 大文件读取和写入-04-order 指定列顺序
  • [数据结构]链表的实现在PHP中
  • 3.7、@ResponseBody 和 @RestController
  • Android组件 - 收藏集 - 掘金
  • CSS 提示工具(Tooltip)
  • Github访问慢解决办法
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java读取Properties文件的六种方法
  • Laravel 菜鸟晋级之路
  • markdown编辑器简评
  • Redux系列x:源码分析
  • socket.io+express实现聊天室的思考(三)
  • 从零开始的无人驾驶 1
  • 大快搜索数据爬虫技术实例安装教学篇
  • 番外篇1:在Windows环境下安装JDK
  • 翻译--Thinking in React
  • 坑!为什么View.startAnimation不起作用?
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 我有几个粽子,和一个故事
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云API、SDK和CLI应用实践方案
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #vue3 实现前端下载excel文件模板功能
  • (12)Hive调优——count distinct去重优化
  • (21)起落架/可伸缩相机支架
  • (C语言)字符分类函数
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (十七)Flink 容错机制
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)JAVA中的堆栈
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 生成二级域名