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.mzph.cn/pingmian/56920.shtml

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

相关文章

前端性能优化之概述篇

对于前端开发来说,性能优化老生常谈了。不管是日常工作中,还是涉及到晋级答辩,性能都是频繁被我们提及的一个话题。 性能优化不是一劳永逸的解决方案,项目在发展过程,代码不断地迭代和变更。我们在某个阶段优化过的代码,过段时间性能又会慢慢下降,这也是前端开发常把性…

从零开始使用最新版Paddle【PaddleOCR系列】——第二部分:自建数据集 + 模型微调训练

目录 一、自建数据集 1.官方数据集格式参考 2.自建数据集txt文件编写代码 3.数据集检验 二、模型训练 1.模型配置yaml文件 2.命令行指令训练 在上一篇文章中,构建好了paddleOCR 运行必需的环境,并通过在线下载的方式,使用官方训练好的模型进…

架构师备考论文-面向服务的架构设计与应用

题目 在面向服务的架构(Service-Oriented Architecture,SOA)中,服务的概念有了延伸,泛指系统对外提供的功能集。例如,在一个大型企业内部,可能存在进销存、人事档案和财务等多个系统&#xff0c…

OpenCV图像处理——查找线条的转折点

问题描述 图像中有一条线,如何判断这条线的转折点? 比如下面一张图: 目的是找到图中的三个转折点。 要在图像中检测线的转折点,可以通过分析线的几何形状来完成。这通常需要首先提取线的轮廓,然后根据曲率、角度变化…

D42【python 接口自动化学习】- python基础之函数

day42 高阶函数 学习日期:20241019 学习目标:函数﹣- 55 高阶函数:函数对象与函数调用的用法区别 学习笔记: 函数对象和函数调用 # 函数对象和函数调用 def foo():print(foo display)# 函数对象 a foo print(a) # &…

JavaWeb Servlet--09深入:注册系统05---动态搜索栏

动态搜索栏 分析:在显示用户信息的表单里有一个下拉框选择用户的信息,一个文本框进行输入,一个按钮就行搜索,在下拉框选择了性别或许姓名的某一个包含字就会返回所有满足的用户。在controller层进行接收选择的搜索条件&#xff0…

三菱PLC伺服-停止位置不正确故障排查

停止位置不正确时,请确认以下项目。 1)请确认伺服放大器(驱动单元)的电子齿轮的设定是否正确。 2)请确认原点位置是否偏移。 1、设计近点信号(DOG)时,请考虑有足够为0N的时间能充分减速到爬行速度。该指令在DOG的前端开始减速到爬行速度&…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【Linux】解读信号的本质&相关函数及指令的介绍

前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

实时语音转文字(基于NAudio+Whisper+VOSP+Websocket)

今天花了大半天时间研究一个实时语音转文字的程序,目的还包括能够唤醒服务,并把命令提供给第三方。 由于这方面的材料已经很多,我就只把过程中遇到的和解决方案简单说下。源代码开源在AudioWhisper: 实时语音转文字(基于NAudioWhisperVOSPWe…

面试八股(自用)

什么是java序列化,什么时候需要序列化? 序列化是指将java对象转化成字节流的过程,反序列化是指将字节流转化成java对象的过程。 当java对象需要在网络上传输 或者 持久化到存储文件中,就需要对java对象进行序列化处理。 JVM的主要组成部分…

[产品管理-46]:产品组合管理中的项目平衡与管道平衡的区别

目录 一、项目平衡 1.1 概述 1.2 项目的类型 1、根据创新程度和开发方式分类 2、根据产品开发和市场周期分类 3、根据风险程度分类 4、根据市场特征分类 5、根据产品生命周期分类 1.3 产品类型的其他分类 1、按物理形态分类 2、按功能或用途分类 3、按技术或创新程…

linux命令之lspci用法

lspci 显示当前主机的所有PCI总线信息 补充说明 lspci命令 用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 语法 lspci(选项)选项 -n:以数字方式显示PCI厂商和设备代码; -t:以树状结构显示PCI设备的层次…

Nginx和MySQL下载

Nginx:2.nginx下载与windows下安装测试_哔哩哔哩_bilibili MySQL:MySQL8.0.21详细安装配置教程-CSDN博客

OceanBase中扩容OCP节点step by step

许多用户在开始使用OceanBase时部署OCP,通常选择单节点部署。但随着后续业务规模的不断扩大,会开始担忧单节点OCP在面对故障时可能丧失对集群运维管控的连续性。鉴于此,会将现有的单节点OCP扩展至多节点部署,以此来确保OCP服务的高…

UML(Unified Modeling Language,统一建模语言)

UML(Unified Modeling Language,统一建模语言)是一种标准化的图形化语言,用于软件工程中的可视化建模。UML由Grady Booch、James Rumbaugh和Ivar Jacobson共同开发,他们各自的工作(Booch方法、OMT方法和OOS…

MusePose模型部署指南

一、模型介绍 MusePose是一个基于扩散和姿势引导的虚拟人视频生成框架。 主要贡献可以概括如下: 发布的模型能够根据给定的姿势序列,生成参考图中人物的舞蹈视频,生成的结果质量超越了同一主题中几乎所有当前开源的模型。发布该 pose alig…

git命令使用一览【自用】

git常见操作: git initgit remote add master【分支名字】 gitgits.xxxxx【仓库中获取的ssh链接或者http协议的链接】检查远程仓库是否链接成功。 git remote -v出现以下画面就可以git pull,git push了

TVS常规过压保护

一、前言 上一篇文章 TVS选型-CSDN博客https://blog.csdn.net/qq_39543984/article/details/142825929?spm=1001.2014.3001.5501我们介绍了如何通过理论计算选择合适的TVS,TVS主要是防止瞬间过压,因为他的名字就叫瞬态二极管(Transient Voltage Suppressor)。本文就通过理…

基于PHP+MySQL+Vue的网上订餐系统

摘要 本文介绍了一个基于PHPMySQLVue技术的网上订餐系统。该系统旨在为用户提供便捷的在线订餐服务,同时提高餐厅的运营效率。系统后端采用PHP语言开发,利用MySQL数据库进行数据存储与管理,实现了用户注册登录、菜品浏览、购物车管理、订单提…