MySQL的事务相关的语句的使用

MySQL的事务相关的语句的使用

事务是数据库管理系统执行过程中的一个程序单位,由一个或多个数据库操作组成。MySQL作为一款流行的关系型数据库管理系统,支持事务处理,允许用户定义一系列的操作,这些操作要么完全执行,要么完全不执行,保证了数据库的完整性和一致性。

事务的基本概念

事务通常用于处理需要多个步骤的复杂操作,而这些步骤必须完整执行,不能只执行部分。在MySQL中,事务的处理依赖于存储引擎,最常见的支持事务的存储引擎是InnoDB。

事务的四大特性(ACID)

  • 原子性(Atomicity):事务是数据库的基本操作单元,它的原子性保证了操作要么全完成要么全不完成。
  • 一致性(Consistency):事务必须使数据库从一个一致性状态转换到另一个一致性状态。
  • 隔离性(Isolation):事务的执行不应受其他事务的干扰。
  • 持久性(Durability):一旦事务提交,则其所做的修改将永久保存在数据库中。

在MySQL中,你可以使用以下SQL语句来控制事务的开始、执行和结束。

事务基本语法

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}

START TRANSACTIONBEGIN

这两个命令用于启动一个新的数据库事务。BEGINSTART TRANSACTION 的简写形式,功能相同。

  • WITH CONSISTENT SNAPSHOT: 在事务开始时创建一个一致性视图。这意味着事务可以看到一个一致的数据库快照,而不受并发事务中的更新操作影响。
  • READ WRITE: 指定事务可以进行读取和写入操作。这是默认设置。
  • READ ONLY: 指定事务只能进行读取操作,不允许写入。这可以优化事务的执行,因为数据库系统知道不需要处理可能的写冲突。

COMMIT

COMMIT 语句用于提交当前事务中的所有更改,使它们成为数据库中的永久更改。

  • WORK: 这是一个可选关键字,用于明确指示提交的是工作事务。通常不是必需的,因为其默认即为操作事务。
  • AND CHAIN: 自动开始一个新的事务,该事务继承当前事务的属性。适用于需要连续处理多个事务的场景。
  • AND NO CHAIN: 结束当前事务后不自动开始新事务。
  • RELEASE: 提交事务并断开当前的数据库连接。
  • NO RELEASE: 提交事务但不断开数据库连接。

ROLLBACK

ROLLBACK 语句用于撤销当前事务中的所有更改,回到事务开始前的状态。

  • COMMIT 类似,ROLLBACK 也可以用 WORK, AND CHAIN, AND NO CHAIN, RELEASE, NO RELEASE 这些选项来控制事务的结束行为和连接的状态。

SET autocommit

SET autocommit 用于控制MySQL的自动提交行为。当 autocommit 设置为1时,每个SQL语句都会被视为一个独立的事务并自动提交。设置为0时,SQL语句不会自动提交,需要显式使用 COMMIT 来提交事务。

  • SET autocommit = 0;: 关闭自动提交。
  • SET autocommit = 1;: 开启自动提交。

常用的事务控制语句

开始一个事务

事务的开始通常使用START TRANSACTIONBEGIN声明。

START TRANSACTION;
-- 或者
BEGIN;

提交一个事务

提交事务意味着所有在事务块内的语句都被执行,并且修改永久保存到数据库中。

COMMIT;

回滚一个事务

如果在执行事务过程中发生错误或者用户主动决定取消事务的执行,可以使用ROLLBACK语句来撤销所有未提交的修改。

ROLLBACK;

设置保存点

在事务中,你可以通过设置保存点(SAVEPOINT)来进行局部的回滚。这是非常有用的功能,可以在事务中的任何点保存当前状态,之后你可以回滚到这个状态而不影响其他的操作。

SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;

释放保存点

如果确定不再需要某个特定的保存点,可以使用RELEASE SAVEPOINT语句来释放它。

RELEASE SAVEPOINT savepoint_name;

设置事务的隔离级别

为了控制事务如何通过锁定机制与其他事务隔离,可以设置事务的隔离级别。MySQL支持以下四种隔离级别:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ(默认级别)
  • SERIALIZABLE

设置隔离级别的语句如下:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

示例:使用事务处理

考虑一个银行转账的场景,其中涉及到两个账户的余额更新。这里展示如何使用事务来确保操作的原子性。

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 100 WHERE name = 'Bob';

-- 如果以上操作都成功执行,提交事务
COMMIT;

-- 如果有任何错误发生,回滚事务
ROLLBACK;

参考链接

  • MySQL事务处理:MySQL官方文档
  • InnoDB存储引擎:InnoDB存储引擎介绍

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_其它背包问题③_力扣377. 组合总和 Ⅳ(似包非包)

目录 力扣377. 组合总和 Ⅳ(似包非包) 解析代码 力扣377. 组合总和 Ⅳ(似包非包) 377. 组合总和 Ⅳ 难度 中等 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 t…

随着深度学习的兴起,浅层机器学习没有用武之地了吗?

深度学习的兴起确实在许多领域取得了显著的成功,尤其是那些涉及大量数据和复杂模式的识别任务,如图像识别、语音识别和自然语言处理等。然而,这并不意味着浅层机器学习(如支持向量机、决策树、朴素贝叶斯等)已经失去了…

【Linux】:文本编辑与输出命令 轻松上手nano、echo和cat

🎥 屿小夏 : 个人主页 🔥个人专栏 : Linux深造日志 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、nano1.1 打开文件:1.2 常用快捷键:1.3 其他功能&#xff…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

DBA-现在应该刚刚入门吧

说来话长 在2023年以前,我的DBA生涯都是“孤独的”。成长路径除了毕业前的实习期有人带,后续几乎都是靠自学。如何自学,看视频、看文档、网上查阅资料、项目实战。 可能是学疏才浅 ,一直都是在中小公司混,在中小公司通…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块,本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络(CNN)架构,由牛津大学的视觉几何组(Visual Geometry Group)提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩,并且在随后的许…

3ds Max2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 3ds Max是一款基于PC系统的强大3D建模、渲染和制作软件,广泛应用于游戏开发、影视后期制作、建筑设计、工业设计等多个领域。其拥有丰富的建模工具,可轻松创建逼真的三维场景和模型;同时&#…

揭秘!综合布线可视化管理软件如何助力集成商实现价值飞跃?

一、弱电集成商发展现状 近期小编通过与多家做弱电集成的朋友交流探讨了解到目前弱电集成商发展如同2024年国内大部分企业一样举步维艰,当然也有个别企业做的项目优质并且利润可观,但是整体不多,总结原因主要有以下几点: 工程项目…

【git】git ignore如何添加core/config.py忽略

在Git中,.gitignore文件用于指定不被Git追踪的文件和文件夹。要添加core/config.py文件到.gitignore中,你需要编辑.gitignore文件并添加以下行: core/config.py这行表示Git应该忽略名为config.py的文件,它位于core目录下。确保在…

【剪映专业版】17高质量视频如何导出

视频课程:B站有知公开课【剪映电脑版教程】 1.导出 目的:导出高质量的视频 如果没有音频及字幕的情况下,音频导出和字幕导出为灰色 2.视频导出 超清:1080P 注意:如果原始素材的分辨率为小于1080P,如果导…

算法:期望场景;鲁棒优化

部分代码 for i1:T stst[D_DGk(i)*min_P_DG<P_DGk(i)<D_DGk(i)*max_P_DG]; end for i2:T indicatorD_DGk(i)-D_DGk(i-1); rangei:min(T,iT_up-1); st st[D_DGk(range)>indicator]; end for i2:T indicatorD_DGk(i-1)-D_DGk(i); rangei:min(T…

Linux - Docker 安装 Nacos

拉取 Nacos 镜像 使用以下命令从 Docker Hub 拉取最新版本的 Nacos 镜像&#xff1a; docker pull nacos/nacos-server启动 Nacos 容器 使用以下命令启动 Nacos 容器&#xff1a; docker run -d \--name nacos \--privileged \--cgroupns host \--env JVM_XMX256m \--env M…

Darknet,看过很多篇,这个最清晰了

Darknet深度学习框架&#xff1a;YOLO背后的强大支持 Darknet&#xff0c;一个由Joseph Redmon开发的轻量级神经网络框架&#xff0c;以其在计算机视觉任务&#xff0c;特别是目标检测中的卓越表现而闻名。本文将详细介绍Darknet的基本概念、结构以及它在深度学习领域的应用。…

nvm版本控制nvm list available报错

# 配置node镜像&#xff1a; node_mirror: https://npmmirror.com/mirrors/node/ # 配置npm镜像&#xff1a; npm_mirror: https://npmmirror.com/mirrors/npm/ 2024.4.22换域名了&#xff0c;改成这个才能用别的不行

揭秘! 商业模式并不是传销!七星创客模式!

关于“商业模式是否等同于拉人头、传销”的疑问&#xff0c;近期在社会上引起了广泛的讨论。很多人一提到商业模式&#xff0c;就会联想到拉人头、传销等负面概念&#xff0c;似乎所有的商业模式都被贴上了这样的标签。 然而&#xff0c;商业模式的内涵远不止于此。商业活动中的…

Linux上的uname

2024年4月19日&#xff0c;周五上午 这是我第一篇用CSDN上的markdown编辑器写的博客&#xff0c;感觉还不错 uname 是一个常用的命令行工具&#xff0c;uname 的全称是 “Unix Name”&#xff0c;它是一个 Unix 和类 Unix 操作系统上的命令行工具&#xff0c;用于获取操作系统相…

mysql面试题八(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

《项目管理超图解》新书来了:快速提升团队行动力的8个关键!

各位&#xff0c;速来对号入座&#xff01; 你的团队&#xff0c;是这样&#xff1f;↓ 还是……这样&#xff1f;↓ 团队失控、协作混乱、项目逾期……有没有可能&#xff0c;是团队行动力出了问题&#xff1f; 所以各位管理者们、创业者们、产品经理/项目经理们、项目管理从…

短说社区的权限设计解读

社区网站的权限设计是非常重要的&#xff0c;合理的权限设计可以维护网站的安全性、保护用户的隐私信息&#xff0c;同时也可以优化用户体验&#xff0c;提升网站的用户参与度。 本文以短说论坛产品为例&#xff0c;讲解下网站的权限如何规划和设计。 短说社区论坛这边考虑到了…