mysql数据库事务(事务设置、隔离级别、实现原理)

目录

事务

数据库事务

事务特性

事务设置

事务隔离级别

1.读未提交

2.读已提交

3.可重复读

4.串行化

事务实现原理

原子性:undolog

持久性:redolog

隔离性:

如果隔离级别是读已提交:

如果隔离级别是可重复读:


事务

数据库事务

一次对数据库操作过程,有多条sql,视为一组,一次执行,一组sql要么都提交成功,要么都失败。保证数据的完整性,mysql中只有i使用nnodb引擎的数据库或表支持事务。

事务特性

原子性:一个事务中的多条sql要么都执行成功,要么都失败,回滚到执行前的状态。

隔离性:数据库中的事物可以多个同时执行,有读未提交、读已提交、可重复读和串行化四种。

持久性:事务提交后,保证数据永久保存,即使宕机。

一致性:保证数据是完整可靠的,原子性、隔离性、持久性都是为了保证数据的一致性。

事务设置

关闭自动事务提交:

set global autocommit = 0;

查看事务自动提交开启的情况:

show  global  varlables like 'autocommit';

-- 开启事务:

begin;

       (sql语句)

rollback;-- 事务回滚

commit; -- 事务提交

事务隔离级别

查看事务的隔离级别:

SELECT @@session.transaction_isolation,@@transaction_isolation;

1.读未提交

 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

 另一个事务正在更改数据,但还没有提交事务,该事物若读取数据,可能造成脏读,不可重复读,幻读。

2.读已提交

 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

一个事务只能读到另一个事务提交后的数据,解决了脏读问题,但还存在不可重复读,幻读。 

不可重复读:

         一个事务在执行事务时,先后读两次,两次结果不相同。

3.可重复读

 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

一个事务在执行时,多次读取数据是一致的。

解决了不可重复读问题,但是幻读问题没有完全解决。

例如下图,事务1不加for update 执行时,事务2添加一行记录后事务1不会幻读,当事务2提交后,事务1若有for update则会出现幻读。

幻读:

 一个事务读取到的数据量不同(insert delete)

4.串行化

 事务只能一个一个进行,即使一个事务写,另一个事务读不可以,但是读读可以,读写不可以。

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE 

事务实现原理

原子性:undolog

mysql使用undolog日志文件,用来记录增删改操作的反向作

insert delete

delete insert

update update

出现异常,事务回滚,执行对应操作的反向操作。

持久性:redolog

redolog

当数据库事务提交后,保证数据是不可撤销。

当sql发送到mysql后,事务还未提交之前,如果发生断电/宕机

会将sql保存到redolog日志文件中

在mysql重启时 执行redolog中的sql

隔离性:

MVCC:多版本并发控制,每次事务对某记录操作时,会生成一个操作的版本链

如果隔离级别是读已提交

在同一个事务中,每次读取时都会从版本链上生成一个快照(readView)

 每次读到得是查询时最新的数据。也称为当前读。

如果隔离级别是可重复读

在事务第一次读取数据时,会从版本链上生成一个快照(readView)

之后再次读取时,仍然会从上次的版本快照中读,

所以隔离级别是可重复读,也称为快照读。

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

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

相关文章

【Linux】 开始使用 gcc 吧!!!

Linux 1 认识gcc2 背景知识3 gcc 怎样完成 ?3.1 预处理预处理^条件编译 3.2 编译3.3 汇编3.4 链接 4 函数库5 gcc 基本选项Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 认识gcc 我们在windows环…

咕泡教育面试

6、Innodb如何解决幻读? 7、cpu飙高,系统反应慢应该怎么排查? 8、Lock和Sychronized区别 9、线程池是怎么知道一个线程是否完成的 10、HashMap是怎么解决hash冲突的 11、什么叫做阻塞队列的有界和无界 12、Dubbo的服务请求失败如何处理…

系统架构设计师教程(十六)嵌入式系统架构设计理论与实践

嵌入式系统架构设计理论与实践 16.1 嵌入式系统概述16.1.1 嵌入式系统发展历程16.1.2 嵌人式系统硬件体系结构16.2 嵌入式系统软件架构原理与特征16.2.1 两种典型的嵌入式系统架构模式16.2.2 嵌入式操作系统16.2.3 嵌入式数据库16.2.4 嵌入式中间件16.2.5 嵌入式系统软件开发环…

CaptureRequest部分参数说明

CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE 用于指定自动曝光(AE)程序在捕获过程中可以使用的帧率范围。AE 代表自动曝光(Auto Exposure),而 FPS 代表每秒帧数(Frames Per Second)。这个设置…

C语言signal处理的底层机制深度探讨

在C语言中,signal处理是操作系统级别的事件处理机制,用于响应各种系统级事件,如程序错误、硬件中断等。深入理解signal处理的底层原理、使用方法以及其局限性对于编写稳定、可靠和安全的代码至关重要。本文旨在全面深入到系统调用和内核级探讨…

智能风控体系之divergence评分卡简介

评分卡模型的出现据说最早是在20世纪40年代,Household Finance and Spiegel和芝加哥邮购公司第一次尝试在贷款决策过程中使用信用评分.但是这两家公司都终止了这项业务。后来,在20世纪50年代末,伊利诺伊州的美国投资公司(AIC&…

【git】记录一个git error解决方法

出现场景 因为代码编写事件有点长,编写好之前有人提交过代码,而我这边没有git pull,所以提交失败了,然后pull的时候,提醒: error: The following untracked working tree files would be overwritten by …

《WebKit 技术内幕》学习之十四(1):调式机制

第14章 调试机制 支持调试HTML、CSS和JavaScript代码是浏览器或者渲染引擎需要提供的一项非常重要的功能,这里包括两种调试类型:其一是功能,其二是性能。功能调试能够帮助HTML开发者使用单步调试等技术来查找代码中的问题,性能调…

Spring Boot 模块工程(通过 Maven Archetype)建立

前言 看到我身边的朋友反馈说,IDEA 新建项目时,如果通过 Spring Initializr 来创建 Spring Boot , 已经无法选择 Java 8 版本,通过上小节的教程,不知道该如何创建 Spring Boot 模块工程。如下图所示: 一.IDEA 搭建 …

Kafka(八)使用Kafka构建数据管道

目录 1 使用场景2 构建数据管道时需要考虑的问题2.1 及时性2.2 可靠性高可用可靠性数据传递 2.3 高吞吐量2.4 数据格式2.5 转换ETLELT 2.6 安全性2.7 故障处理2.8 耦合性和灵活性临时数据管道元数据丢失末端处理 3 使用Connect API3.1 Connect的数据处理流程sourcesinkconnecto…

Vue3+Ts:实现paypal按钮

Vue3Ts:实现paypal按钮 一、前端页面按钮实现第一步:下载paypal.js依赖第二步:引入要使用的vue页面,并调用。 二、实现逻辑研究第一点:了解下Buttons自带的style属性第二点:了解下Buttons自带的处理方法第三…

centos7配置Google身份认证登录

1.手机app下载谷歌身份验证器 2.配置本地yum源 yum -y install git automake libtool pam-devel bzip2 wget vim ntpdate 3.校对时间 timedatectl set-timezone Asia/Shanghai ntpdate cn.pool.ntp.org 4.下载工具包 wget http://repository.timesys.com/buildsources/l/…

IP组播地址

目录 1.硬件组播 2.因特网范围内的组播 IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址 组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址…

丝路昆仑文物展:启用网关,文物预防性保护设备数据无缝对接平台

一、多功能网关数据无缝流转 近日,“丝路昆仑——新疆文物精品展”在天津博物馆开展。展览分为三部分:“丝路前奏”、“丝路华响”和“丝路梵音”,前两部分是以张骞凿通西域前后的中原西域两地文化交流,第三部分则讲述了佛教沿西…

人工智能数学验证工具LEAN4【入门介绍5】推理世界-如何使用和证明推理性的命题

视频链接: 人工智能数学验证工具LEAN4【入门介绍5】推理世界-如何使用和证明推理性的命题_哔哩哔哩_bilibili import Game.Levels.Implication.L10one_ne_zero World "Implication" Level 11 Title "2 2 ≠ 5" LemmaTab "Peano" …

Maven排除依赖 exclusions

排除依赖 exclusions 间接依赖是可以通过传递性依赖机制引入到当前项目中,而有时候第三方组件B的C依赖由于版本(1.0)过低存在安全漏洞。我们期望能够将该间接依赖直接剔除出去,不通过传递依赖的形式引入到项目中。这时即可通过exclusions元素实现&#x…

【并发】什么是 Future?

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 关键特性和操作包括: 提交任务: 查询完成状态: 等待结果: 取消任务&#xff1a…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

年销180万辆的特斯拉,护城河却在崩塌

文|刘俊宏 2023年率先开启汽车价格战的马斯克,伤敌一百自损八千? 在1月25日的特斯拉2023Q4财报电话会上,特斯拉CEO马斯克对中国公司的竞争力如此感叹道,“要是没有贸易壁垒,他们将摧毁(destroy…