数据库(31)——事务

事务

    数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机制之一,特别是在多用户并发访问数据库的情况下。

    在MySQL中,事务(Transaction)是一组要么全部执行成功,要么全部不执行的SQL语句集合。事务的主要目的是确保数据的一致性和完整性,即使在出现错误或系统崩溃的情况下也能保护数据不受损害。

开启事务

BEGIN;

START TRANSACTION;

结束事务 

结束事务分为提交和回滚

提交:COMMIT;

回滚:ROLLBACK;


演示

在初始表demo中只有一个数据

接下来使用START TRANSACTION;开启事务,并对数据库进行操作:

     然后尝试使用rollback回滚,回滚后再次查询:

    可以发现前面3条插入语句都被rollback撤销了,这会将数据库恢复到事务开始之前的状态。

接下来使用begin重新开启事务,并插入两条数据:

使用select语句查询:

可以发现尽管没有提交事务,但是查询数据时仍然能查到数据。

原因是MySQL使用的是InnoDB存储引擎,而InnoDB的默认隔离级别是REPEATABLE READ(可重复读)。

什么是隔离级别?

隔离级别

    事务隔离级别是指一个事务与其他事务隔离的程度。在数据库系统中,多个事务可能会并发执行,而这些事务之间可能会相互干扰。事务隔离级别就是用来解决这种并发问题的一种机制,它规定了事务在并发执行时的行为。

SQL标准定义了四种事务隔离级别,它们分别是:

  1. 读未提交(Read Uncommitted)

    • 允许事务读取另一个事务还未提交的更改。

    • 可能导致脏读、不可重复读和幻读。

    • 在MySQL的InnoDB存储引擎中,实际上并不支持真正的读未提交隔离级别,而是会将其提升为读已提交。

  2. 读已提交(Read Committed)

    • 确保事务只能读取另一个事务已经提交的更改。

    • 避免脏读,但可能导致不可重复读和幻读。

    • 在这个级别下,每次读取都会获取数据的最新状态。

  3. 可重复读(Repeatable Read)

    • 确保在同一个事务中多次读取同一数据时,结果一致。

    • 避免脏读和不可重复读,但可能导致幻读。

    • 这是MySQL InnoDB存储引擎的默认隔离级别。

    • 在这个级别下,事务开始时建立的数据快照在整个事务期间都是可见的。

  4. 串行化(Serializable)

    • 确保事务完全串行化执行,即事务一个接一个地按顺序执行。

    • 避免脏读、不可重复读和幻读。

    • 提供最高的事务隔离级别,但并发性能最低。


在可重复读的级别下,可以看到自己事务开始时的数据状态,对于在事务内的更改依然可以通过select语句查询到,因为InnoDB允许事务内的一直性读取。

接下来提交事务:

提交事务后,数据已经成功的在数据库表上修改。 

使用事务的主要好处在于它能够确保数据的一致性和完整性,同时提高系统的可靠性和稳定性。当发生故障时,也能及时的使用回滚进行恢复。

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

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

相关文章

Android 获取OAID

获取OAID 老规矩,直接上: implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid,还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

每日互动基于 Apache DolphinScheduler 从容应对ClickHouse 大数据入库瓶颈

引言 大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。 这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHous…

[vulnhub] Brainpan1

https://www.vulnhub.com/entry/brainpan-1,51/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是166 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-1…

JAVA的设计模式都有那些

Java设计模式是为了解决软件开发中常见的问题而创建的一系列最佳实践。它们提供了一种在特定情境下解决问题的方法论,并且已经被广泛验证和应用。这些模式不是具体的代码,而是关于如何组织代码以达到某种目的的高层次描述。设计模式通常分为三大类&#…

一致校验矩阵计算

目录 T1T2T3 T1 设二元(7,4)码的生成矩阵为: G [ 1 0 0 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 1 1 0 ] G\begin{bmatrix}1&0&0&0&1&1&1\\0&1&0&0&1&0&1\\0&0&1&0&0&1&1\\0&…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…

关于使用K8s实现容器化作业的总时效最优调度

一、Kubernetes对总时效最优调度实现的情况 Kubernetes 可以帮助实现一定程度的时效性优化,但要达到“总时效性最优”还需要一些额外的配置和调度策略。以下是一些可以提升整体时效性的策略: 1. 资源请求和限制设置 为每个容器设置合适的资源请求和限制…

判断对象、数组的方法

判断对象的方法 Object.prototype.toString.call(obj) ‘[object Object]’ 推荐指数 :五颗星obj instanceof Object 推荐指数 :四颗星typeof obj Object 推荐指数 :三颗星 注意:null也是一个对象 typeof(null) Object obj…

基于Intel Gaudi AI加速器的大语言模型微调与推理优化赛题等你挑战 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛(简称2024 CCF BDCI)又在激烈进行中啦! 多个赛题等你挑战还没有报名的伙伴们抓紧时间咯,叫上你伙伴练起来吧! 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人

如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道。 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难。 为了解决这个痛点,我们开发了…

GEE 高阶应用:下载全球任何国家的森林损失保存到assets中

目录 简介 数据 函数 filterMetadata(name, operator, value) Arguments: Returns: Collection aggregate_array(property) Arguments: Returns: List ee.Number.parse(input, radix) Arguments: Returns: Number clipToCollection(collection) Arguments: Retu…

C++ 在项目中使用vim

一:概述 除了掌握 Vim 的基本操作,利用 Vim 阅读项目源码的方法同样重要,这对实际项目开发大有裨益。虽然现在有许多人选择使用 VSCode,但在某些环境中,可能无法安装 VSCode 或联网下载插件,这时使用 Vim 就…

Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(一)认识和了解Build.cs

目录 引言 一、创建一个C插件TextureReader插件 二、Build.cs文件 三、ModuleRules 四、TextureReader插件的构造 4.1ReadOnlyTargetRules的作用 4.2TextureReaderd的构造调用 4.3设置当前类的预编译头文件的使用模式 4.4PublicIncludePaths.AddRange与PrivateInclude…

探索C嘎嘎:初步接触STL

#1024程序员节|征文# 前言: 在前文小编讲述了模版初阶,其实讲述模版就是为了给讲STL提前铺垫,STL是C中很重要的一部分,各位读者朋友要知道它的份量,下面废话不多说,开始走进STL的世界。 目录&am…

指令系统 I(指令的格式、寻址)

一、指令系统 1. 指令集体系结构 指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是指令集体系结构(ISA&#xf…

说一说QWidget

目录 关于QWidget 作为界面组件时,你需要有印象的 1. 控制属性 2. 组件状态与交互属性 3. 外观和样式属性 4. 布局与子组件管理属性 5. 图标和光标属性 6. 大小策略属性 作为单独的窗体的属性 写Qt快两年了,也写过一些规模偏大的软件&#xff0c…

刘艳兵-DBA015-对于属于默认undo撤销表空间的数据文件的丢失,哪条语句是正确的?

对于属于默认undo撤销表空间的数据文件的丢失,哪条语句是正确的? A 所有未提交的交易都将丢失。 B 数据库实例中止。 C 数据库处于MOUNT状态,需要恢复才能打开。 D 数据库保持打开状态以供查询,但除具有SYSDBA特权的用…

如何精准选择Yandex关键词

Hey小伙伴们👋,今天来聊聊如何精准选择Yandex关键词,让你的广告投放效果最大化!🔍 1.使用Yandex关键词工具:Yandex提供了关键词工具,如Yandex Keyword Planner和Yandex Wordstat&#xff0…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

go语言回调函数的使用

前言 在 Go 语言中,回调函数是一种将一个函数作为参数传递给另一个函数,在特定的事件发生时被调用的编程模式。 一、回调函数的定义 type OnTaskHandler func(r []byte)type remoteTaskClient struct {sync.RWMutexonTask OnTaskHandler } 以上定义了…