MYSQL——事务管理

什么是事务

在数据库使用者角度,事务就是完成一个事件。例如一个员工信息数据库,要完成员工离职的事件,可能需要很多操作,比如删除员工基本信息以及员工在公司的表现,薪资水平等。而这一系列的操作就是为了完成员工离职这一个事件,这就是事务。事务可以是一个sql语句,也可以是多个。但是,事务不仅仅是几个sql语句的简单集合,这些语句还要有如下属性:

  • 原子性Atomicity:在处理事务这个操作上,只有两种状态:完成和未完成。绝对不可能存在正在完成这个状态。
  • 持久性Durability:事务处理完之后,数据的修改是永久的,即使系统故障也不会影响
  • 隔离性Isolation:由于事务是并发的,为了防止多个事务交叉执行产生错误,需要对事务间进行隔离。
  • 一致性Consistence:在事务完成后,数据库的结构,规则等完整性没有被破坏。这一性质的实现是依赖前三个性质的。

为什么出现事务

事务是面向应用层的用户的,在完成一个事务时,应用者只需要关注完成结果,事务失败就回滚。不需要用户考虑出现的各种问题,简化了用户的使用。例如,银行的公务员,在进行转账操作时,如果转账失败就将金额退回原账户,不需要考虑是服务器出问题了还是网络出问题了。

事务的版本支持

MySQL 中只有使用了 Innodb 数据库引擎的数据库或表支持事务。可以使用指令查看:
show engines \G

事务的提交方式

手动提交

事务开始:

begin;

然后进行sql语句处理数据,处理结束后提交事务:

commit;

在事务未提交前,所有的数据操作都不会被其他mysql客户端访问到 

自动提交

一般情况下,自动提交是开启状态,可以查询一下:

show variables like 'autocommit';

 

 自动提交适用于我们直接使用sql语句的情景,即我们不使用手动提交的时候,autocommit变量对手动提交没有任何影响,手动提交必须手动commit。此时,单个sql语句会被看作一个事务,在执行这条语句后,自动提交。但是如果将autocommit关闭后,就需要手动提交:

事务的回滚

在事务中,可以设置回滚点。如果在某个时刻想要回到回滚点的状态,可以直接回滚到这个点:

--设置回滚点
savepoint 回滚点名字;
--回滚到回滚点
rollback to 回滚点名字;
--回滚到最开始
rollback;

  • 当我们在处理事务时突然退出mysql,不能commit。事务会自动回滚到开始,相当于执行rollback。
  • 事务一旦提交,就无法回滚。

事务属性的理解

原子性

事务commit前,所有的数据操作都不会更新到数据库中。如果中间的某个语句发生错误,就会回滚到事务开始;只有事务commit后才会更新数据库。这样的回滚机制就让事务只存在开始和完成两个状态,也就是所谓的原子性。

持久性

事务一旦commit,数据库就会更新,这时候即使系统崩溃突然关闭,数据也是修改后的。

隔离性

 为了让并行的事务之间不同程度的避免干扰,就出现了隔离级别这个属性。

隔离级别有四种:

  • 读未提交(Read Uncommitted):所有事务都可以看到其他事务未提交的执行结果,相当于没有隔离性,会造成脏读,幻读,不可重复读等问题
  • 读提交(Read Committed):一个事务只能看到其他的已经提交的事务所做的改变。但是还是会造成不可重复读的问题
  • 可重复读(Repeatable Read):一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的。
  • 串行化(Seralizable):会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行

脏读(Dirty Read)是指一个事务读取到另一个事务未提交的数据。如果这个未提交的数据被回滚(Rollback),那么第一个事务读取的数据就是不正确的。

不可重复读是指在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况

查看与设置隔离性:

--查看全局隔离级别(新起一个会话会使用全局隔离级别)
select @@global.tx_isolation;--查看会话隔离级别
select @@session.tx_isolation;
或者
select @@tx_isolation;--设置全局隔离级别
set global transaction isolation level 
read uncommitted/read committed/repeatable read/serializable;--设置会话隔离级别
set (session) transaction isolation level 
read uncommitted/read committed/repeatable read/serializable;

读未提交

 

读提交

可重复读

串行化

对所有操作全部加锁,进行串行化,不会有问题,但是只要串行化,效率很低,几乎完全不会被采用 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

书生实战营第四期-基础岛第四关-InternLM + LlamaIndex RAG 实践

一、任务要求1 基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前 浦语 API 不会回答,借助 LlamaIndex 后 浦语 API 具备回答 A 的能力,截图保存。 1、配置开发机系统 镜像:使用 Cuda12.0-conda 镜…

LC:二分查找——杂记

文章目录 268. 丢失的数字162. 寻找峰值 268. 丢失的数字 LC将此题归类为二分查找,并且为简单题,下面记一下自己对这道题目的思考。 题目链接:268.丢失的数字 第一次看到这个题目,虽然标注的为简单,但肯定不能直接排…

推荐一款国产数据库管理工具Chat2DB

什么是 Chat2DB ? Chat2DB 是一款专为现代数据驱动型企业打造的数据库管理、数据开发及数据分析工具。作为一款AI原生的产品,Chat2DB 将人工智能技术与传统数据库管理功能深度融合,旨在提供更为智能、便捷的工作体验,助力用户高效地管理数据…

前端三件套(HTML + CSS + JS)

前言: 前端三件套,会用就行 毕竟在后面学习JavaWeb,以及在学习vue的时候也有帮助 前端三件套: HTML 定义网页的结构和内容。CSS 负责网页的样式和布局。JavaScript 添加动态交互和功能。 使用到的工具是Visual Studio Code 即…

Flutter错误: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared

前言 今天要做蓝牙通信的功能,我使用了flutter_reactive_ble这个库,但是在运行的时候发现一下错误 Launching lib/main.dart on AQM AL10 in debug mode... /Users/macbook/Desktop/test/flutter/my_app/android/app/src/debug/AndroidManifest.xml Err…

网络编程示例之网络基础知识

TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP: TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送…

十七:Spring Boot 依赖(2)-- spring-boot-starter-data-jpa 依赖详解

目录 1. 理解 JPA(Java Persistence API) 1.1 什么是 JPA? 1.2 JPA 与 Hibernate 的关系 1.3 JPA 的基本注解:Entity, Table, Id, GeneratedValue 1.4 JPA 与数据库表的映射 2. Spring Data JPA 概述 2.1 什么是 Spring Dat…

商品,订单业务流程梳理一

业务架构梳理 业务系统介绍 业务商品流程 业务订单流程 业务售后流程 系统架构 技术栈

HDR视频技术之二:光电转换与 HDR 图像显示

将自然界中的真实场景转换为屏幕上显示出来的图像,往往需要经过两个主要的步骤:第一个是通过摄影设备,将外界的光信息转换为图像信息存储起来,本质上是存储为数字信号;第二个是通过显示设备,将图像信息转换…

Linux完结

学习视频笔记均来自B站UP主" 泷羽sec",如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 【linux基础之病毒编写(完结)】 https://www.bilibili.com/video…

苹果iOS 18.4将允许欧盟地区的iPhone用户设置默认地图和翻译应用

在一份最新文件中,苹果概述了其为遵守欧盟数字市场法案所采取的措施,并透露将允许欧盟的 iPhone 和 iPad 用户从"2025 年春季"开始设置默认导航和翻译应用程序。 这一时间表表明,这些选项将在 iOS 18.4 和 iPadOS 18.4 中添加&…

鸿蒙进阶篇-type、typeof、类

“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…

鸿蒙进阶篇-剩余和展开、简单和复杂类型

“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

【LeetCode:3242. 设计相邻元素求和服务 + 模拟 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

[产品管理-62]:不同角度看产品的生命周期

目录 一、产品的生命周期与不确定性 创意生成 原型开发 规模化和商业化 - 上市前的准备 产品上市 二、产品的生命周期与组合管理 三、产品生命周期变得越来越短的原因 1. 科技进步 2. 消费需求变化 》 物质需求的单一化到精神需求的易变化 3. 市场竞争加剧 4. 全球化…

WPS单元格重复值提示设置

选中要检查的所有的单元格 设置提示效果 当出现单元格值重复时,重复的单元格就会自动变化 要修改或删除,点击

华为eNSP:AAA认证(pap和chap)telnet/ssh

pap模式 一、拓扑图 二、配置过程 1、这个型号路由器是不带串口的,所以需要添加串口板卡 2、加入串行接口卡槽 右击路由,选择设置,将串口板卡拖动到路由器扩展槽,并开机即可 3、认证方路由器配置 [r8]aaa #进入aaa认证 [r8-a…

CSS网格布局:打造现代网页设计的强大工具

在现代网页设计中,布局的灵活性和美观性至关重要。随着需求的不断变化,CSS 网格布局(CSS Grid Layout)作为一种新兴的布局方式,正在成为开发者们的首选工具。它能够轻松创建复杂的网格结构,使得网页设计更加…

SpringBoot助力的共享汽车业务优化系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…