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存储引擎介绍

在这里插入图片描述

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

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

相关文章

数仓建模—数仓架构发展史

数仓建模—数仓架构发展史 时代的变迁,生死的轮回,历史长河滔滔,没有什么是永恒的,只有变化才是不变的,技术亦是如此,当你选择互联网的那一刻,你就相当于乘坐了一个滚滚向前的时代列车,开往未知的方向,不论什么样的技术架构只有放在当前的时代背景下,才是有意义的,…

MySQl-8.3.0版本安装下载教程(超详细保姆级教程)

第一步,去百度找到MySQl官网 第二步,找到DOWNLOAD(下载) 第三步 第四步 第五步 第六步.选择倒数第2个 第七步 第八步然后根据步骤安装就好了

MultiCD工具:创建一个多引导Linux USB驱动器

众所周知,拥有一个可安装多个可用操作系统的 CD 或 USB 驱动器在各种情况下都非常有用。无论是为了快速测试或调试某些内容,还是只是重新安装笔记本电脑或 PC 的操作系统,这都可以为你节省大量时间。 在本文中,将介绍如何使用名为…

最新win11配置cuda以及cudnn补丁教程

1、首先使用指令 nvidia-smi 查看电脑支持的**最高cuda**版本,例如:本机 12.2 2、进入CUDA下载cuda安装包 https://developer.nvidia.com/cuda-toolkit-archive 2、点击上方绿色的链接,按照图中序号选择的即可,最后点击下载。 …

VUE识别图片文字OCR(tesseract.js)

效果:1&#xff1a; 效果图2&#xff1a; 一、安装tesseract.js npm i tesseract.js 二、静态页面实现 <template><div><div style"marginTop:100px"><input change"handleChage" type"file" id"image-input"…

计算机网络—— book

文章目录 一、概述1.互联网的核心部分1&#xff0e;电路交换的主要特点2&#xff0e;分组交换的主要特点 2.计算机网络的性能1&#xff0e;速率2&#xff0e;带宽3&#xff0e;吞吐量4&#xff0e;时延5&#xff0e;利用率 3.计算机网络体系结构协议与划分层次具有五层协议的体…

深度学习之视觉特征提取器——VGG系列

VGG 提出论文&#xff1a;1409.1556.pdf (arxiv.org) 引入 距离VGG网络的提出已经约十年&#xff0c;很难想象在深度学习高速发展的今天&#xff0c;一个模型能够历经十年而不衰。虽然如今已经有VGG的大量替代品&#xff0c;但是笔者研究的一些领域仍然有大量工作选择使用VG…

【git】Git回退版本常用命令及多种场景应用指南

Git回退版本常用命令及多种场景应用指南 在使用Git进行版本控制时&#xff0c;回退版本是一个常见的需求&#xff0c;无论是开发中的误操作&#xff0c;还是代码版本的调整&#xff0c;都可能涉及到需要回滚到某个特定的版本。Git提供了多种命令来帮助我们有效地管理和回退版本…

MVCC(多版本并发控制)

MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09;是一种并发控制方法&#xff0c;用于解决数据库中多个事务同时执行时可能产生的数据一致性问题。MVCC 在数据库中通过维护多个数据版本&#xff08;记录历史版本&#xff09;来提供高…

SpringBoot整合RocketMQ异步顺序消息DEMO

RocketMQ版本4.9.4 pom <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency> yml rocketmq:producer:retry-times-when-send…

Debezium系列之:Debezium2.6稳定版本Oracle数据库Debezium Connector的属性参数详解

Debezium系列之:Debezium2.6稳定版本Oracle数据库Debezium Connector的属性参数详解 一、连接器属性二、必需的 Debezium Oracle 连接器配置属性三、Debezium Oracle 连接器数据库架构历史配置属性四、用于配置生产者和消费者客户端的传递数据库架构历史属性五、Debezium 连接…

使用go_concurrent_map 管理 并发更新缓存

在后台服务中&#xff0c;为了提速&#xff0c;我在内存还做了一个告诉缓存来管理用户信息&#xff0c;根据更新通知&#xff0c;或者定时去redis中同步信息&#xff0c;那么在加载或者更新某个用户元素时&#xff0c;要防止并发&#xff0c; 当&#xff1a; 1&#xff09;如…

【nodejs】express-generator项目--创建接口及数据库连接

文章目录 一、创建接口1、路由routes&#xff08;1&#xff09;新建路由文件&#xff08;2&#xff09;注册路由 2、控制器controller&#xff08;1&#xff09;新建controller文件&#xff08;2&#xff09;代码 3、services&#xff08;1&#xff09;新建services文件&#x…

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…

oracle 清空回收站

参考官方文档 select * from user_recyclebin; select * from dba_recyclebin; ---清除回收站中当前用户下的对象 purge recyclebin; ---清除回收站中所有的对象 purge dba_recyclebin; ---清除回收站中指定用户的表 PURGE TABLE owner.table_name; ---清除回收站中指…

PON系统“被动光网络”

目录 光线路终端&#xff08;OLT&#xff09; 光分配网络&#xff08;ODN&#xff09; 光网络单元&#xff08;ONU&#xff09; PON系统&#xff08;Passive Optical Network&#xff0c;被动光网络&#xff09;是一种基于光纤传输的接入网络架构&#xff0c;常用于提供宽带…

Serverless 成本再优化:Knative 支持抢占式实例

作者&#xff1a;元毅、向先 Knative 是一款云原生、跨平台的开源 Serverless 应用编排框架&#xff0c;而抢占式实例是公有云中性价比较高的资源。Knative 与抢占式实例的结合可以进一步降低用户资源使用成本。本文介绍如何在 Knative 中使用抢占式实例。 背景信息 抢占式实…

Python | Leetcode Python题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right 0, len(nums) #采用左闭右开区间[left,right)while left < right: # 右开所以不能有,区间不存在mid left (right - left)//2 # 防止溢出…

Java web应用性能分析概叙

“系统慢”&#xff0c;这是任何一个应用都会出现的问题&#xff0c;面对“系统慢”的问题&#xff0c;客户、测试、开发、管理者等不同角色的人员有不同反应&#xff1a; 客户&#xff1a;啥破东西啊&#xff0c;这么卡&#xff01; 测试&#xff1a;性能bug已提交。 开发&…

golang面试题

基础题 Go 的优势是什么? 天然支持并发&#xff0c;通过Goroutine和通道实现的支持静态链接&#xff0c;也就是把依赖也打到可执行文件编译语言&#xff0c;效率更高&#xff0c;相对于php、、python、js Go 程序中的包是什么? 相当于php中的命名空间 类库 make和new有…