SQL 自学:事务处理的COMMIT 和 ROLLBACK 语句的运用

在 SQL 中,事务处理是确保数据库操作的完整性和一致性的重要机制。事务可以看作是一组作为一个单元执行的数据库操作,要么全部成功提交(COMMIT),要么全部回滚(ROLLBACK)到事务开始之前的状态。

一、事务处理的概念

事务具有四个重要的特性,通常被称为 ACID 特性:

  • 原子性(Atomicity):事务中的所有操作要么全部成功执行,要么全部不执行。就好像一个不可分割的操作单元,不能只完成一部分。
  • 一致性(Consistency):事务执行的结果必须使数据库从一个一致性状态转变到另一个一致性状态。例如,在银行转账事务中,无论转账过程中发生什么,总金额必须保持不变。
  • 隔离性(Isolation):多个事务并发执行时,它们之间相互隔离,一个事务的执行不能被其他事务干扰。每个事务都感觉不到其他事务的存在。
  • 持久性(Durability):一旦事务被提交(COMMIT),其对数据库的更改就会永久保存下来,即使系统出现故障也不会丢失。

二、COMMIT 语句

COMMIT 语句用于将事务中所做的更改永久保存到数据库中。当执行了一系列的插入、更新或删除操作后,如果希望这些操作的结果被真正地应用到数据库中,就需要使用 COMMIT 语句。

例如,假设有一个银行账户表 accounts,包含 account_id(账户 ID)、balance(余额)等列。现在要从账户 1 向账户 2 转账 100 元。

BEGIN TRANSACTION;
-- 从账户 1 扣除 100 元
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- 向账户 2 增加 100 元
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

在上述代码中,首先使用 BEGIN TRANSACTION 开启一个事务。然后进行了两次更新操作,分别修改两个账户的余额。最后使用 COMMIT 语句将这些更改永久保存到数据库中。如果没有 COMMIT,那么这些更改在事务结束后会被自动回滚。

三、ROLLBACK 语句

ROLLBACK 语句用于撤销事务中所做的更改,将数据库恢复到事务开始之前的状态。

例如,还是上面的银行转账例子,如果在转账过程中出现了错误(比如账户 2 不存在),我们可以使用 ROLLBACK 来撤销操作:

BEGIN TRANSACTION;
-- 从账户 1 扣除 100 元
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- 假设发现账户 2 不存在,回滚操作
ROLLBACK;

在这个例子中,由于发现了错误,我们使用 ROLLBACK 语句撤销了从账户 1 扣除金额的操作,数据库中的余额将保持事务开始之前的状态。

再举一个例子,假设我们正在向一个表中插入多行数据,但是在插入过程中出现了异常。

BEGIN TRANSACTION;
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
-- 假设这里出现了错误,比如违反了唯一性约束
ROLLBACK;

 在这个例子中,如果第二个插入操作出现错误,ROLLBACK 会将第一个插入操作也撤销掉,就好像整个事务从未发生过一样。

四、事务处理的重要性

事务处理在实际的数据库应用中非常重要。例如,在金融交易、订单处理、库存管理等场景中,必须保证数据的一致性和完整性。如果没有事务处理,可能会出现数据不一致的情况,例如在银行转账中,钱从一个账户扣除了,但没有加到另一个账户上,这将导致严重的问题。

总之,通过合理使用 COMMIT 和 ROLLBACK 语句进行事务处理,我们可以确保数据库操作的正确性和可靠性,避免数据不一致和错误的发生。在编写 SQL 代码时,应该根据业务需求,谨慎地使用事务来保证数据的完整性和一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451963.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据-171 Elasticsearch ES-Head 与 Kibana 配置 使用 测试

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Python案例小练习——小计算器

文章目录 前言一、代码展示二、运行展示 前言 这是用python实现一个简单的计器。 一、代码展示 def calculate(num1, op, num2):if op "":return float(num1) float(num2)elif op "-":return float(num1) - float(num2)elif op "*":return…

vue3--通用 popover 气泡卡片组件实现

背景 在日常开发中,我们一般都是利用一些诸如:element-ui、element-plus、ant-design等组件库去做我们的页面或者系统 这些对于一些后台管理系统来说是最好的选择,因为后台管理系统其实都是大同小异的,包括功能、布局结构等 但是对于前台项目,比如官网、门户网站这些 …

Ubuntu如何显示pcl版本

终端输入: apt-cache show libpcl-dev可以看到,Ubuntu20.04,下载的pcl,应该都是1.10版本的

dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

一、 为什么要用日期格式化 因为在开发项目过程中,会遇到各种各样的日期格式,有的显示完整的年-月-日 时:分:秒,而有的场景就只显示月-日等格式,还有就是显示当前时间和注册时间的间隔时长等,场景非常多,如…

Docker部署Kamailio,并使用LinPhone实现网络通话

前提条件 准备一个路由器,一个服务器,两个终端设备(手机或电脑) docker部署安装 我使用的是windows系统,docker desktop 先启动Docker desktop打开cmd,输入docker命令docker run --name kamailio --rm…

【MySQL】多表查询——内连接,左/右连接

目录 准备工作 1.多表查询 2.INNER JOIN(内连接) 2.1.笛卡尔积 1.2.笛卡尔积的过滤 1.3.INNER JOIN(显式内连接) 1.4.SELF JOIN(自连接) 3. LEFT JOIN(左连接) 3.1.一个例子…

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键 文章目录 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键1. 进入BIOS快捷键2. 快速进入BIOS设置界面3. 快速进入启动项选择界面 1. 进入BIOS快捷键 进入BIOS设置界面的快捷键为F2快速进入启动项选择界面的快捷键为F12 2. 快速进…

asyn queueRequest使用实例

使用queueRequest读写端口驱动的示例&#xff0c;驱动驱动程序使用一个基于asyn实现了asynCommon和asynOctet的驱动程序-CSDN博客中编写的驱动程序&#xff0c;本程序的C代码如下&#xff1a; #include <stdlib.h> #include <stdio.h> #include <string.h>#…

Sqli-labs less-27

Sqli-labs less-27 过滤union\select绕过方式 ### 1. 逻辑绕过 例&#xff1a; 过滤代码 union select user,password from users 绕过方式 1 && (select user from users where userid1)‘admin’### 2.十六进制字符绕过 select ——> selec\x74 union——>un…

nacos的使用

nacos的使用 本专栏的上一篇文章已经部署好了nacos&#xff0c;我们就可以使用nacos做配置中心和注册中心了。 一、配置中心 有了nacos&#xff0c;我们在微服务项目的配置文件里只需要做一些简单的配置就行了&#xff1a;服务名、服务端口、nacos的地址。其余的配置都可以用…

RBTree(红黑树)的介绍和实现

欢迎来到杀马特的主页&#xff1a;羑悻的小杀马特.-CSDN博客 目录 ​编辑 一红黑树介绍&#xff1a; 1.1红黑树概念&#xff1a; 1.2红黑树遵循的原则&#xff1a; 1.3红黑树效率分析&#xff1a; 二.红黑树的实现&#xff1a; 2.1红黑树结构&#xff1a; 2.2红黑树节点…

如意控物联网项目(二)-ML307R模组软件调试之MQTT+硬件接口调试笔记

目录 概要 1、 操作系统----RTOS kernel CMSIS-RTOS2 2、 程序API文档 3、 MQTT调试记录-2024年10月9日 4、 ML307_APP_DEMO_SDK使用指南 5、 MQTT登录onenet平台成功 6、 ML307R链接onenet平台成功-接收数据成功 7、 timer定时器调试 8、 操作系统--OS程序学习 1. 事件…

【实战指南】Vue.js 介绍组件数据绑定路由构建高效前端应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

G1 GAN生成MNIST手写数字图像

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 G1 GAN生成MNIST手写数字图像 1. 生成对抗网络 (GAN) 简介 生成对抗网络 (GAN) 是一种通过“对抗性”学习生成数据的深度学习模型&#xff0c;通常用于生成…

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是可控的&#xff0c;并且参数会带入到数据库中执行&#xff0c;导致…

CCS字体、字号更改+CCS下载官方链接

Step1、 按照图示箭头操作 step2 Step3 点击确定&#xff0c;点击Apply(应用)&#xff0c;点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载&#xff1a;官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…

MEMC功能详解

文章目录 MEMC的工作原理&#xff1a;优点&#xff1a;缺点&#xff1a;适用场景&#xff1a;1. Deblur&#xff08;去模糊&#xff09;2. Dejudder&#xff08;去抖动&#xff09;总结两者区别&#xff1a; MEMC&#xff08;Motion Estimation and Motion Compensation&#x…

【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)

本文项目编号 T 020 &#xff0c;文末自助获取源码 \color{red}{T020&#xff0c;文末自助获取源码} T020&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

编码方式知识整理【ASCII、Unicode和UTF-8】

编码方式 一、ASCII编码二、Unicode 编码三、UTF-8编码四、GB2312编码五、GBK编码 计算机中对数据的存储为二进制形式&#xff0c;但采用什么样的编码方式存储&#xff0c;效率更高。主要编码方式有 ASCII、Unicode、UTF-8等。 英文一般为1个字节&#xff0c;汉字一般为3个字节…