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

SQL中如何进行 ‘’撤销‘’ 操作-详解

在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。

### 1. 事务控制
在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作要么全部成功,要么全部失败。

- **开启事务**:

  START TRANSACTION;

- **提交事务**(使所有更改永久生效):

  COMMIT;

- **回滚事务**(撤销所有未提交的更改):

  ROLLBACK;

### 2. 回滚操作
如果您已经执行了一些更改(例如,通过 `INSERT`、`UPDATE` 或 `DELETE` 语句),并且希望撤销这些更改,您可以使用 `ROLLBACK` 语句。但是,请注意,只有那些在当前事务中的更改可以被回滚。如果您的更改已经通过 `COMMIT` 提交,那么它们将永久生效,无法通过 `ROLLBACK` 撤销。

### 示例
假设您在一个事务中执行了以下操作:

START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

如果您在提交事务之前发现第一个更新操作有误,您可以撤销所有未提交的更改:

ROLLBACK;

这将撤销这两个更新操作,因为它们都在同一个事务中。

### 注意事项
- 并非所有的数据库引擎都支持事务。例如,MySQL 的 MyISAM 引擎不支持事务。
- 在默认情况下,许多数据库系统(包括 MySQL)在每个单独的操作后自动提交事务。这意味着,如果您没有明确地开始一个事务,每个 `INSERT`、`UPDATE` 或 `DELETE` 语句都会立即生效并无法撤销。
- 为了能够撤销操作,确保您了解数据库的事务配置,并在必要时正确使用 `START TRANSACTION`、`COMMIT` 和 `ROLLBACK` 语句。

要在 MySQL 中使用 ROLLBACK 来撤销已经执行的语句,您需要先关闭自动提交模式,然后显式地管理事务。以下是详细步骤:

  1. 关闭自动提交模式: 您需要将 autocommit 变量设置为 0,这样就不会在每个语句执行后自动提交事务了。

    //查看事务的提交方式
    SHOW @@AUTOCOMMIT
    //设置事务的提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效
    //默认是为1 即自动提交,所以平常执行的sql语句都是自动提交的
    SET autocommit = 0;
  2. 执行 SQL 语句: 在关闭自动提交模式后,您可以执行多个 SQL 语句,这些语句的更改不会立即生效,而是会保持在当前事务中。

    UPDATE table_name SET column_name = 'new_value' WHERE condition;
    -- 更改尚未提交,可以在此时使用 ROLLBACK 或 COMMIT在当前事务中,你可以查询 table_name 表,并看到更新后的结果。其他事务或会话查询同一 table_name 表时,看不到这些更改,因为更改还没有被提交
  3. 使用 ROLLBACK 撤销更改: 如果您发现需要撤销事务中的更改,可以使用 ROLLBACK 语句。这将撤销当前事务中的所有更改。

    ROLLBACK;
    -- 所有更改被撤销,数据恢复到事务开始前的状态
  4. 使用 COMMIT 提交更改: 如果您确认事务中的更改是正确的,可以使用 COMMIT 语句来提交这些更改,使它们永久生效。

    COMMIT;
    -- 更改被提交,无法再使用 ROLLBACK 撤销
  5. 重新开启自动提交模式(可选): 如果您完成事务管理后,想要恢复自动提交模式,可以再次将 autocommit 变量设置为 1

    SET autocommit = 1;

示例

以下是一个完整的示例,展示如何使用 ROLLBACK 来撤销更改:

-- 关闭自动提交模式
SET autocommit = 0;-- 开始事务
START TRANSACTION;-- 执行更新操作//执行完后只有当前的会话中可以查看执行结果,他是没真正的提交,
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;-- 检查操作是否正确,如果需要撤销
ROLLBACK;
-- 所有更改被撤销-- 如果操作正确,可以提交事务//提交了就不能更改了
COMMIT;
-- 更改被提交

通过这种方式,您可以更灵活地管理数据库事务,确保数据的完整性和一致性。

相关文章:

SQL中如何进行 ‘’撤销‘’ 操作-详解

在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。 ### 1. 事务控制 在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作…...

Hadoop之WordCount测试

1、Hadoop简介: Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型。HDFS是一个高度容错的系统&#xf…...

Vue和axios零基础学习

Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行,切换成淘宝镜像源,安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件,在终端输入…...

STM32新建工程-基于库函数

目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件,并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号,然后点击OK。 …...

matlab入门学习(二)矩阵、字符串、基本语句、函数

一、矩阵 1、矩阵生成 %矩阵生成%直接法 A[1,2,3; 4,5,6; 7,8,9]%冒号一维矩阵:开始,步长,结束(步长为1时可以省略) B1:1:10 B1:10 %函数法%linspace(开始,结束,元素个数),等差生成…...

PC端微信小程序如何调试?

向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序,没有出现调试的界面:点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试,改完代码没反应再刷新看看,再没反应就再次重新点击编译并自动调试。...

点击按钮提示气泡信息(Toast)

演示效果&#xff1a; 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…...

【易社保-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

155. 最小栈

思路 按栈的特点&#xff1a;顶部即列表尾部 class MinStack(object):def __init__(self):self.stack[]def push(self, val):""":type val: int:rtype: None"""self.stack.append(val)def pop(self):""":rtype: None"&quo…...

用Manim实现高尔顿板(Galton Board)

高尔顿板的介绍 高尔顿板&#xff08;Galton Board&#xff09;&#xff0c;有时也称为贝尔图&#xff08;Bean Machine&#xff09;&#xff0c;是由英国统计学家弗朗西斯高尔顿&#xff08;Francis Galton&#xff09;于19世纪末发明的一种物理装置&#xff0c;用于演示随机分…...

OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为视频捕获打开一个视频文件、捕获设备或 IP 视频流。 这是一个重载成员函数&#xff0c;提供给用户方便使用。它与上述函数的不同之处仅在于它所…...

vue3+vite@4+ts+elementplus创建项目详解

1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置&#xff1a; 找到项目路径下的package.json目录下找到script对象下面添加一下代码&#xff1a; "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是&#xff1a;cnpm run serve 3…...

Python 从入门到实战34(实例2:绘制蟒蛇)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件&#xff0c;但 ADCP 后处理软件无法写入信息2.3…...

JAVA实现大写金额转小写金额

在金融行业中经常需要把大写金额转成小写金额&#xff0c;之前在一次开发中有个类似的需求&#xff0c;翻阅了好多博文&#xff0c;都没找到合适的&#xff0c;故没办法&#xff0c;就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue

TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#x…...

【C++学习笔记 21】C++中的动态数组 vertor

静态数组 首先来创建一个静态数组 #include <iostream> #include <string>struct Vertex {float x, y, z; };std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {stream << vertex.x << "," <&…...

MongoDB 快速入门+单机部署(附带脚本)

目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考&#xff1a; https://docs.mongoing.com/ 介绍…...

组合数求法汇总

一&#xff1a;递推求解 对于组合数&#xff0c;有此式&#xff1a; C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} Cnm​Cn−1m−1​Cn−1m​。 C n m C_{n}^{m} Cnm​ 可理解为 n n n 个数中选 m m m 个&#xff0c;不同的方案。对于第 n n n 个…...

Python知识点:在Python编程中,如何使用Joblib进行并行计算

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Joblib是一个Python库&#xff0c;它被设计用来提供轻便的并行计算解决方案&…...

免费开源钥匙建模终极指南:快速生成3D打印钥匙模型

免费开源钥匙建模终极指南&#xff1a;快速生成3D打印钥匙模型 【免费下载链接】keygen OpenSCAD tools for generating physical keys 项目地址: https://gitcode.com/gh_mirrors/ke/keygen 在数字化制造时代&#xff0c;开源钥匙建模工具Keygen为技术爱好者和实践者提…...

文件日期更改器:在 Windows 上修改文件日期的完整指南

需要更改文件创建日期或编辑修改时间戳&#xff1f;我们的综合指南揭示了三种有效的文件日期修改方法&#xff0c;其中包括评价最高的文件属性日期修改工具——视频转换器的文件日期修改器。学习专业的文件日期修改技巧&#xff0c;同时确保数据完整性。为什么您可能需要更改文…...

AI净界RMBG-1.4快速上手指南:小白也能轻松搞定透明素材

AI净界RMBG-1.4快速上手指南&#xff1a;小白也能轻松搞定透明素材 1. 为什么你需要这个工具 如果你曾经尝试过用传统软件抠图&#xff0c;一定遇到过这些烦恼&#xff1a;发丝边缘总是有残留背景色、半透明物体抠出来像蒙了一层雾、宠物毛发看起来像被啃过一样参差不齐。AI净…...

开源视频下载工具downkyi:高效管理B站资源的全流程指南

开源视频下载工具downkyi&#xff1a;高效管理B站资源的全流程指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...

从汇编指令到硬件行为:深入解析Aurix Tricore Trap触发与恢复的全过程

从汇编指令到硬件行为&#xff1a;深入解析Aurix Tricore Trap触发与恢复的全过程 当我们在调试Aurix Tricore处理器的异常处理机制时&#xff0c;常常会遇到一个令人困惑的现象&#xff1a;为什么有些Trap发生后程序能够继续执行&#xff0c;而有些则会导致系统崩溃&#xff…...

终极游戏画质升级指南:用OptiScaler解锁全显卡超采样自由

终极游戏画质升级指南&#xff1a;用OptiScaler解锁全显卡超采样自由 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler OptiScaler是…...

文脉定序系统处理多语言语义排序实战:跨语言检索效果展示

文脉定序系统处理多语言语义排序实战&#xff1a;跨语言检索效果展示 你有没有遇到过这样的烦恼&#xff1f;想找一份关于“机器学习”的日文资料&#xff0c;却只能用中文关键词去搜&#xff0c;结果要么搜不到&#xff0c;要么搜出来的东西完全不对路。或者&#xff0c;你手…...

【数字信号调制】基于matlab GMSK调制解调系统【含Matlab源码 15239期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

零基础掌握开源工具:3步实现群晖Photos功能强化

零基础掌握开源工具&#xff1a;3步实现群晖Photos功能强化 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 当你面对海量照片却无法享受智能分类的便…...

连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训

&#x1f525; 连续使用 OpenClaw 50 天后&#xff0c;我总结了 3 个核心工作流和 5 个血泪教训AI 不会取代你&#xff0c;但会用 AI 的人会取代你——这句话说烂了&#xff0c;但 50 天后我才真正明白它的意思。01 上周五下午 5 点&#xff0c;同事都在加班&#xff0c;我先走…...