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

MySQL的事务处理Savepoint,commit

什么是事务处理

事务处理是一种机制,用来管理必须成批执行的 SQL 操作,保证数据库不包含不完整的操作结果。
利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行(除非明确指示)。

事务的特性:ACID

1、A,也就是原子性(Atomicity)。原子的概念就是不可分割,你可以把它理解为组成物质的基本单位,也是我们进行数据处理操作的基本单位。
2、C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
3、I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。
4、D,指的是持久性(Durability)。事务提交之后对数据的修改是持久性的,即使在系统出故障的情况下,比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。

常用MySQL事务控制语句

1、START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
2、COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
3、ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
4、SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
5、RELEASE SAVEPOINT:删除某个保存点。
6、SET TRANSACTION,设置事务的隔离级别。
注意:
事务处理用来管理 INSERT、UPDATE 和 DELETE 语句。
不能回退 SELECT 语句(回退 SELECT 语句也没有必要),也不能回退 CREATE 或 DROP 操作。

举例:

在购物网站添加一个新客户到表Customers,将这个客户的订单编号插入表Orders,将订单详细信息插入表OrderItems。
设置保存点,当插入订单编号或者订单详情不成功时,回退到未加入订单编号前,即订单表Orders与详情表OrderItems同步更新,要么就所有语句一起成功,要么就所有语句一起失败。

BEGIN TRANSACTION
    INSERT INTO Customers(cust_id, cust_name)
    VALUES(1000000010, 'Toys Emporium');
    -- 创建保存点
    SAVE TRANSACTION StartOrder; 
    INSERT INTO Orders(order_num, order_date, cust_id)
    VALUES(20100,'2001/12/1',1000000010);
    -- 判断插入语句是否执行成功
    IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
    INSERT INTO OrderItems(order_num, order_item,prod_id, quantity, item_price)
    VALUES(20100, 1, 'BR01', 100, 5.49);
    IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
    INSERT INTO OrderItems(order_num, order_item,prod_id, quantity, item_price)
    VALUES(20100, 2, 'BR03', 100, 10.99);
    IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION

参考博文:
https://blog.csdn.net/weixin_45711681/article/details/125512935
https://blog.csdn.net/vaivxuanzi/article/details/124861513


http://www.kler.cn/news/355922.html

相关文章:

  • 管家婆工贸ERP BB081.订单收付款功能
  • 【Vue】--项目文件结构
  • 线性可分支持向量机的原理推导 转为拉格朗日函数式 公式解析
  • 以太坊的未来面临挑战:Covalent Network(CXT)的 EWM 轻客户端提供解决方案
  • 大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置
  • C# -- Abstract、Virtual、interface
  • c++ 使用 Jarvis 算法或包装的凸包(Convex Hull using Jarvis’ Algorithm or Wrapping)
  • 问:JVM中的垃圾器,有哪些?
  • 嵌入式入门学习——7Protues导入Arduino IDE生成的固件和Arduino使用库文件开发
  • 大数据-177 Elasticsearch Query DSL - 聚合分析 指标聚合 桶聚合
  • 华为杯”第十三届中国研究生数学建模竞赛-E题:基于多目标规划和智能优化算法的粮食最低收购价政策研究(中)
  • 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键
  • 16.数组、指针、结构体与函数
  • 【github】git基础用法 git flow工作模式 常用命令
  • 解决React中的Hooks闭包陷阱
  • Linux历史
  • 基于SSM公廉租房维保系统的设计
  • 【vue】指令补充+样式绑定+计算属性+侦听器
  • Vite+Vue 3+TS环境搭建
  • OpenCV高级图形用户界面(8)在指定的窗口中显示一幅图像函数imshow()的使用