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 来撤销已经执行的语句,您需要先关闭自动提交模式,然后显式地管理事务。以下是详细步骤:
-
关闭自动提交模式: 您需要将
autocommit变量设置为0,这样就不会在每个语句执行后自动提交事务了。//查看事务的提交方式 SHOW @@AUTOCOMMIT //设置事务的提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效 //默认是为1 即自动提交,所以平常执行的sql语句都是自动提交的 SET autocommit = 0; -
执行 SQL 语句: 在关闭自动提交模式后,您可以执行多个 SQL 语句,这些语句的更改不会立即生效,而是会保持在当前事务中。
UPDATE table_name SET column_name = 'new_value' WHERE condition; -- 更改尚未提交,可以在此时使用 ROLLBACK 或 COMMIT在当前事务中,你可以查询 table_name 表,并看到更新后的结果。其他事务或会话查询同一 table_name 表时,看不到这些更改,因为更改还没有被提交 -
使用
ROLLBACK撤销更改: 如果您发现需要撤销事务中的更改,可以使用ROLLBACK语句。这将撤销当前事务中的所有更改。ROLLBACK; -- 所有更改被撤销,数据恢复到事务开始前的状态 -
使用
COMMIT提交更改: 如果您确认事务中的更改是正确的,可以使用COMMIT语句来提交这些更改,使它们永久生效。COMMIT; -- 更改被提交,无法再使用 ROLLBACK 撤销 -
重新开启自动提交模式(可选): 如果您完成事务管理后,想要恢复自动提交模式,可以再次将
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是一个高度容错的系统…...
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)
演示效果: 目录结构: activity_main.xml(布局文件)代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…...
【易社保-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
155. 最小栈
思路 按栈的特点:顶部即列表尾部 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)
高尔顿板的介绍 高尔顿板(Galton Board),有时也称为贝尔图(Bean Machine),是由英国统计学家弗朗西斯高尔顿(Francis Galton)于19世纪末发明的一种物理装置,用于演示随机分…...
OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为视频捕获打开一个视频文件、捕获设备或 IP 视频流。 这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所…...
vue3+vite@4+ts+elementplus创建项目详解
1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置: 找到项目路径下的package.json目录下找到script对象下面添加一下代码: "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是:cnpm run serve 3…...
Python 从入门到实战34(实例2:绘制蟒蛇)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...
Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件,但 ADCP 后处理软件无法写入信息2.3…...
JAVA实现大写金额转小写金额
在金融行业中经常需要把大写金额转成小写金额,之前在一次开发中有个类似的需求,翻阅了好多博文,都没找到合适的,故没办法,就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#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 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…...
组合数求法汇总
一:递推求解 对于组合数,有此式: C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} CnmCn−1m−1Cn−1m。 C n m C_{n}^{m} Cnm 可理解为 n n n 个数中选 m m m 个,不同的方案。对于第 n n n 个…...
Python知识点:在Python编程中,如何使用Joblib进行并行计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! Joblib是一个Python库,它被设计用来提供轻便的并行计算解决方案&…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
