事务 ---MySQL的总结(六)

news2024/11/18 18:17:30

事务

多进程进行并改变同一个数据,如果没有进行版本控制,就会出现数据不确定的问题,为此引入了事务的概念。可以进行数据回滚,解决潜在的问题。

事务的概念

一组的DML组成,这一些的DML要么同时成功,要么同时失败。

一个完整的事务需要满足四个属性:1,完整性 2,一致性 3,隔离性

4,持久性

版本支持

目前的MySQL支持的储存引擎 InnoDB存储引擎,其他的储存引擎不支持事务。

从下面的表之中可以看见所有的储存引擎的本事特点以及是否有事务的作用。

IMG_7E0357D37F97-1

事务的提交方式

根据的不同的事务提交方式分为自动提交与手动提交。

对于查看是否开启自动提交的命令如下

show variables like 'autocommit';

image-20230517092836134

自动提交本身针对的就是单个SQL。

单个SQL语句本身就是一个事务,如果取消自动提交,单的sql需要直接进行手动进行commit进行提交。

修改自动提交,数值为1,就是开启自动提交。数值为0,就是关闭自动提交。

set autocommit=1;

设置为手动提交

image-20230517111813241

没有插入数据之前的时候,进行slect

image-20230517111910411

提交之后的的数据对比(这里的id =32数据之前没有提交(没有commit))

image-20230517112027792

这里表明自动提交是对于单句sql语句的操作。

事务的所有操作

开始事务

begin;
strat;

直接进行事务的创建

设置回滚点

savepoint s1;

设置回滚点是s1

回滚

rollback s1;

回滚数据到s1点位置(如果commit之后,就不会进行回滚点操作了)

提交事务

commit;

事务的性质

原子性

事务的SQL语句,需要同时进行起作用,如果没有成功的话!整个事务都不会执行成功。会回归到事务之前的状态。

持久性

事务结束之后,对于数据的修改是永远的,就是MySQL软件出现问题,数据也不会失去。

隔离性

数据库允许多个事务同时对于其数据读,写和修改数据。隔离性防止多个事务并发执行时导致数据的不一致。

一致性

满足上面的三个的性质,就是满足一致性。让数据满足预设的规则,包括数据的精度,串联性,直发性的完成预定的工作。

事务隔离级别

多事务进行访问,会出现事务相互影响的情况。为了保证不同事务执行过程不受干扰,就有了重要的特征:隔离性。

允许不同的事务之间的受不同的程度的干扰,就有了重要的特征隔离级别。

事务出现错误

不同的隔离级别出现不同的错误现象,脏读,不可重复读,幻读

脏读:

当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 数据是还没有提交的数据,另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作是不正确的。

不可重复读:

同一个事务,多次读多同一个数据,数据的不同。

幻读:

事务A与事务B进行共同执行相关的操作。事务A执行select,事务B执行insert之后,事务A执行select,可以查看到了事务B的执行条件之后表内容。正常的操作应该是事务A看不到事务B的操作。

0b1b915e926c82f0a81b6666c79b46f3

读取方法

快照读:这里就可以读取其他事务更新的东西

select * from table_name lock in share mode;
select * from table_name for update;

事务级别

未提交(RU模式):
都可以看到未提交的数据内容(相当于没有隔离性质)

已提交读(RC模式):只可以看到另外一个事务提交之后的数据,使用快照读()之后,数据就会更新提交的数据。

可重复读(RR模式):读取的数据应该是使用快照读时候的数据,使用当前读,数据会更新到提交事务之后的数据。

可串行化(S模式):所有的事务之间的数据不共享,完全隔离

不同的隔离级别声明的名称

image-20230517200225341

查看和设置隔离级别

隔离级别分成全局隔级别,当前会话级别。创建一个新的会话,使用的隔离级别就是使用全集的隔离级别。

select @@global.tx_isolation;//查看全局的隔离级别

image-20230517194048985

select @@session.tx_isolation;//查看当前会话的隔离级别

image-20230517194827267

设置隔离级别

这里的session可以换成global,进行操作。READ UNCOMMITTED可以换成其他的类型的隔离级别。

set session  transaction isolation level READ UNCOMMITTED;

image-20230517203951688

这里的隔离级别,设置会话为RU模式。其他 的模式也是可以使用差不多的操作方法。

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

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

相关文章

Linux上开启coredump

Linux上开启core dump Core dump(核心转储)是在程序崩溃时生成的一种文件,其中包含了程序在崩溃时的内存状态信息。它可以帮助程序员在调试程序时快速定位问题,并且是一种非常有用的调试工具。core dump的作用如下: 帮…

Java面向对象程序设计实验报告(实验二 面向对象基础练习)

✨作者:命运之光 ✨ 专栏:Java面向对象程序设计实验报告 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录:源程序代码(带注释) 测试类demo2 Address类 Employee类…

Docker之DockerFile相关基础知识

DockerFile相关基础知识 一、Docker镜像原理1、操作系统组成部分1.1 七大子系统1.2 Linux文件系统 2、Docker镜像原理介绍2.1 原理图2.2 Docker镜像本质2.3 统一文件系统2.4 复用性2.5 统一性 二、容器转为镜像1、Docker镜像的制作1.1 容器转换为镜像1.2 镜像转为压缩文件1.3 导…

【SpringBoot】三:访问数据库

文章目录 1.DataSource2.JdbcTemplate2.1 准备环境2.2 准备表和数据2.3 配置数据源2.4 JdbcTemplate访问mysql2.5 创建实体类 ArticlePO2.6 测试2.6.1 测试聚合函数 3.mybatis3.1 单表CRUMD3.1.1 创建模块3.1.2 查询3.1.3 插入3.1.4 更新3.1.5 删除 3.2 ResultMap3.3 SQL 提供者…

Elasticsearch 集群部署管理

Elasticsearch 集群配置版本均为8以上 安装前准备 CPU 2C 内存4G或更多 操作系统: Ubuntu20.04,Ubuntu18.04,Rocky8.X,Centos 7.X 操作系统盘50G 主机名设置规则为nodeX.qingtong.org 生产环境建议准备单独的数据磁盘主机名 #各自服务器配置自己的主机名 hostnamectl set-ho…

【2023/05/17】smalltalk

Hello!大家好,我是霜淮子,2023倒计时第12天。 Share His own morning are new surprises to God. 译文: 神自己的清晨,在他自己看来也是新奇的。 Life finds its wealth by the claims of the world,and its worth…

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架

1 main.py主入口 # -*- coding:utf-8 -*- # 作者:虫无涯 # 日期:2023/2/17 # 文件名称:main.py # 作用:框架的主入口函数# codingutf-8import time from common.reportOut import report_out from common.logOut import log_out …

Wandb.init和wandb.sweep的使用准则

目录 在使用 wandb.init() 初始化函数时,你可以包含以下信息: 如果在同一个代码中多次调用 wandb.init(),可能会导致以下问题: 如果你在一个大文件中使用了 wandb.init(),并且想在其他小文件中使用 wandb.log() 来记…

docker-compose部署sonarqube开源代码审计和分析平台

生成文件夹 mkdir -p /docker/sonar/postgres/postgresql mkdir -p /docker/sonar/postgres/datamkdir -p /docker/sonar/sonarqube chmod 777 -R /docker/sonar/sonarqube echo "vm.max_map_count262144" > /etc/sysctl.conf sysctl -p 创建docker-compose.yml文…

Kuberentes,k8s诞生简介

一、前言 什么是k8s? Kuberentes 是基于容器的集群管理平台,它的简称,是K8S。有人说之所以叫k8s,是因为k到s中间有8个字母,因此叫k8s,也有人说,在使用k8s的安装配置流程中,共分为8…

6年测开经验面试十家大厂,整理出来的笔记...

我第一次接触自动化是在2016年。那时刚毕业一年有余,组内一直做手工功能测试,大概在2018年9月,部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化,测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

STM32独立按键扫描,支持同时按下、长按、快速键值

背景 有个项目在实际应用中,采用8个独立按键,每个按键都赋予不同功能,实际使用过程中很多时候都是需要比较特殊的按键操作,例如:长按10s按键、长按5s按键,或者长按需要有快速按键值的反馈,这个…

wordcloud背景图多图形演示

文章目录 前言一、问题二、多图层1.部分重叠1.1背景图1.2词云图 2.完全重叠2.1背景图2.2词云图 3.不重叠3.1背景图3.2词云图 三、不同形状1.背景图2.词云图 四、代码总结 前言 大家好,我是空空star,本篇给大家分享一下wordcloud背景图多图形演示。 一、问…

网络安全真的那么好吗?

近几年,随着网络安全被列为国家安全战略的一部分,这个曾经细分的领域发展提速了不少,除了一些传统安全厂商以外,一些互联网大厂也都纷纷加码了在这一块的投入,随之而来的吸引了越来越多的新鲜血液不断涌入。 网络安全…

多源环境(QGIS\PostgreSQL\ARCGIS\MAXENT\R语言)支持下的SolVES 模型生态系统服务功能社会价值评估

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

Python自动化测试实现的思路及方法

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步: 1. 确定自动化测试的范围和目标: 首先需要明确需要进行自动化测试的范围和目标,包括测试场景、测试用例、测试数据等。 2. 选择自动化测…

Kubernetes第2天

第四章 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。 Namespace ​ Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 ​ 默认情况下&…

机器学习——决策树原理及CART算法

问:CART决策树可以有多个分支结构。 答:错误。CART决策树每个内部节点只能有两个分支结构,这些分支分别对应于二进制判定的是或否。因此,CART决策树的每个节点将数据集分成两个较小的子集,其中一个子集满足某种特定条…

【系分知识】需求评审

目录 背景介绍标题目的与意义方法与流程成果展示 背景介绍 软件开发是一项复杂的工作,需要涉及到众多的人员和团队。在这个过程中,需求评审是保证项目质量和进度的关键环节。它是在项目启动之前,对所有的需求进行全面的评估和审查&#xff0c…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…