MySQL — InnoDB事务

news2024/11/11 5:23:42

文章目录

  • 事务定义
  • 事务特性
  • 事务隔离级别
    • READ UNCOMMITTED
    • REPEATABLE READ
    • READ COMMITTED
    • SERIALIZABLE
  • 事务存在的问题
    • 脏读(Dirty Read)
    • 不可重复读(Non-repeatable Read)
    • 幻读(Phantom Read)

事务定义

数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。

  • 事务是一个原子操作。是一个最小执行单元。可以甶一个或多个SQL语句组成
  • 在同一个事务当中,所有的SQL语句都成功执行时,整 个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

事务特性

一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

    事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

事务隔离级别

事务隔离是数据库处理的基础之一。隔离级别用于在多个事务同时进行更改和执行查询时,调整性能与可靠性、一致性和结果可再现性之间的平衡。

InnoDB提供了四种事务隔离级别:READ UNCOMMITTED, READ COMMITTED, REPEATABLE READSERIALIZABLE

InnoDB默认的隔离级别是 REPEATABLE READ

READ UNCOMMITTED

最低的隔离级别,允许一个事务读取另一个事务尚未提交的数据。这种隔离级别可能会导致脏读(Dirty Read)问题,即读取到了其他事务中未提交的数据。

REPEATABLE READ

InnoDB默认的隔离级别。保证在同一个事务中多次读取同一行数据时,读取结果保持一致。其他事务对数据的修改在当前事务提交之前不可见。这种隔离级别解决了不可重复读问题,但可能会导致幻读(Phantom Read)问题,即在同一个事务中,对同一查询条件的查询结果可能不一致。

READ COMMITTED

允许一个事务只读取已经提交的数据。这种隔离级别解决了脏读问题,但可能会导致不可重复读(Non-repeatable Read)问题,即在同一个事务中,对同一行数据的读取结果可能不一致。

SERIALIZABLE

最高的隔离级别,通过强制事务串行执行,完全避免了并发问题。事务串行执行可以解决幻读问题,但也可能导致较低的并发性能。

事务存在的问题

在MySQL中,四种隔离级别,分别有可能产生如图所示问题:
在这里插入图片描述

脏读(Dirty Read)

一个事务读取了另一个事务未提交的数据。当一个事务进行修改操作时,另一个事务可能读取到未提交的数据,导致数据不一致。

不可重复读(Non-repeatable Read)

一个事务在同一个事务内多次读取同一数据时,由于其他事务对数据进行了修改,导致读取结果不一致。这可能会导致事务处理过程中数据的不稳定性。

幻读(Phantom Read)

一个事务在同一个事务内多次查询时,由于其他事务对数据进行了插入或删除操作,导致查询结果不一致。这可能会导致事务中的数据集合发生变化。

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

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

相关文章

【vue3】elementPlus主题色定制

以scss语言为例 1、element-plus自动按需导入配置,可参考官网按需导入模块 安装element-plus及辅助插件 npm i element-plus --save安装辅助插件 npm install -D unplugin-vue-components unplugin-auto-import安装sass npm i sass -D2、vite.config.js 中配置…

FPGA应用学习笔记--时钟域的控制 亚稳态的解决

时钟域就是同一个时钟的区域,体现在laways语句边缘触发语句中,设计规模增大就会导致时钟不同步,有时差,就要设计多时钟域。 会经过与门的延时产生的新时钟域,这种其实不推荐使用,但在ascl里面很常见 在处理…

《2023年中国企业数字化转型发展白皮书》发布

导读 本报告主要采用市场调查、行业深度访谈、桌面研究等方法,并使用艾媒咨询旗下各大数据计算系统和相关计算模型。 对部分相关的公开信息进行筛选,通过对行业专家、相关企业与网民进行深度访谈,了解相关行业主要情况,获得相应…

k8s dns 解析service异常

查看kube-dns日志 for p in $(kubectl get pods --namespacekube-system -l k8s-appkube-dns -o name); \ do kubectl logs --namespacekube-system $p; done k8s教程(service篇)-总结_阿甘兄的技术博客_51CTO博客

常用的mysql子查询

你好!下面是一些常用的 MySQL 子查询: 标量子查询(Scalar Subquery):返回单个值作为查询结果。SELECT column_name FROM table_name WHERE column_name (SELECT column_name FROM table_name WHERE condition); 列表…

ML类CFAR检测器在不同环境中检测性能的分析

摘要:该文是楼主翻阅书籍以及一些论文总结出来的关于ML(均值)类CFAR检测器在不同环境中的性能对比,以及优缺点的总结,可以帮助大家面对不同情形如何选择CFAR问题。由于楼主见识短浅,文中难免出现不足之处,望各位指出。…

Docker之jenkins部署harbor在harbor中完成部署

Docker之jenkins部署harbor在harbor中完成部署 1、harbor作用 Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和拉取,并提供了图形管理界面帮助用户查阅和删除这些Artifact。在Harbor 2.0版本中,除容器镜像外,Harbor对符合OCI…

自定义线程池 01 - 阻塞队列

完整代码已上传gitee ,地址 :朱元杰的开源仓库 – ThreadPool核心源码仿写 完整文章栏目地址在:Fearless____的博客 - ThreadPool仿写 接下来将手动仿写一个线程池,第一步先仿写 阻塞队列 ​​​​​​​​​​​​​​​​​ 为…

docker删除容器时报错:Error response from daemon: reference does not exist

前言 之前使用的docker版本太低了,升级高版本docker之后的错误。 低版本docker(1.30.1)中的镜像有:golang、mysql,将docker升级为24.0.5并新拉取mysql最新版本之后,执行docker images命令,发现…

【Kaggle】Identify Contrails to Reduce Global Warming 比赛数据集的可视化(含源代码)

一、数据简单解读 卫星图像最初来自&#xff1a; https://www.goes-r.gov/spacesegment/abi.html高级基线成像仪是GOES-R系列中用于对地球天气、海洋和环境进行成像的主要仪器。ABI用16个不同的光谱波段观察地球&#xff08;上一代GOES只有<>个&#xff09;&#xff0c…

MySQL数据库基础语法 - 上

一&#xff0c;数据库操作 数据库中不区分大小写&#xff01;&#xff01;&#xff01; 1.1 显示数据库 show databases ; 如图&#xff1a; 1.2 创建数据库 create database [ if not exists ]数据库名 ; 如图&#xff1a; 1.3 使用数据库 use 数据库名 &#xff1b; 如图&a…

PHP codeigniter4 搭配Nginx

> 主要是为了用Nginx运行PHP环境 1. Nginx 官方文档的配置 default.conf This configuration enables URLs without “index.php” in them and using CodeIgniter’s “404 - File Not Found” for URLs ending with “.php”. server {listen 80;listen [::]:80;se…

Discovery studio构建药效团(Pharmacophore)的方式

药效团(Pharmacophore)是特征化的三维结构要素的组合&#xff0c;可以分为两种类型。一类是具有相同药理作用的类似物&#xff0c;它们具有某种基本结构&#xff0c;即相同的化学结构部分如磺胺类药物、局麻药、受体阻断剂、拟肾上腺素药物等;另一类是一组化学结构完全不同的分…

快速上手Vue开发:新一代Vue官方脚手架(create-vue)

文章目录 一、简介二、创建一个 Vue 应用1、前提条件2、安装命令3、可选插件 一、简介 create-vue 是 Vue3 的专用脚手架&#xff0c;使用 vite 创建 Vue3 的项目&#xff0c;也可以选择安装需要的各种插件&#xff0c;使用更简单。 二、创建一个 Vue 应用 官网地址&#xff…

【云原生】Docker 详解(一):从虚拟机到容器

Docker 详解&#xff08;一&#xff09;&#xff1a;从虚拟机到容器 1.虚拟化 要解释清楚 Docker&#xff0c;首先要解释清楚 容器&#xff08;Container&#xff09;的概念。要解释容器的话&#xff0c;就需要从操作系统说起。操作系统太底层&#xff0c;细说的话一两本书都说…

.netcore grpc一元方法详解

一、grpc服务端搭建 打开visual studio--》新建项目--》创建ASP.NET Core gRPC服务。 这里我是用的.NET 6.0做为底层框架&#xff0c;使用该框架支持grpc的功能更全面。令注使用nuget包Grpc.AspNetCore这里我使用的是2.40.0版本。 // 创建dollar.proto文件syntax "prot…

【Linux的开胃小菜】Linux系统安装后初始化配置操作

我们刚接手一台刚安装好服务器系统之后&#xff0c;可以对系统进行一些基础优化&#xff1a; 常规设定&#xff1a; centos: 1.关闭 iptables 2.关闭 selinux 3.设定 ChronyUbuntu: 4. /etc/security/limits.conf 5. /etc/sysctl.conf1.首先使用国内阿里云的yum源&#xff08…

企业微信 企业内部开发 学习笔记

官方文档 文档 术语介绍 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代码 推送消息 final WxCp…

基于Crow的C++的WebSocket服务器

基于Crow的C的WebSocket服务器 一、WebSocket 1.1 什么是WebSocket WebSocket 是一种持久化的通讯协议。 很多网站为了实现推送技术&#xff0c;所用的技术都是轮询&#xff0c;这种解决方案是指由浏览器每隔一段时间向服务器发出 HTTP 请求&#xff0c;然后服务器返回最新的…

【BASH】回顾与知识点梳理(十七)

【BASH】回顾与知识点梳理 十七 十七. 什么是 Shell scripts17.1 干嘛学习 shell scripts自动化管理的重要依据追踪与管理系统的重要工作简单入侵检测功能连续指令单一化简易的数据处理跨平台支持与学习历程较短 17.2 第一支 script 的撰写与执行撰写第一支 script 17.3 撰写 s…