MySql 事务

embedded/2024/10/15 15:45:00/

事务ACID特性

事务:一组操作要么全部成功,要么全部失败,目的是为了保证数据的最终一致性。

原子性(Atomicity):当前的事务要么同时成功,要么同时失败。原子性由undo log日志来实现。mysql undo log日志会在后台生成相应的对应数据日志,比如当执行insert语句时会undo log日志生成对于的delete语句,在事务执行失败回滚时会执行该语句。)
一致性(Consistency):使事务的最终目的,由其他3个特性以及业务代码正确逻辑来实现、
隔离性(Isolation):在事务并发执行时,他们的内部操作不能互相干扰。隔离性由mysql的各种锁以及MVCC机制来实现。
持久性(Durability):一旦提交了事务,他对事务的更改应该是永久性的,持久性由redo log日志实现。

事务隔离性

InnoDB引擎中,定义了4种隔离级别,级别越高事务隔离性越好,但性能就越低,而隔离性是由MYSQL的各种锁和MVCC机制来实现的。

  • read uncommit(读未提交):脏读
  • read commit(读已提交):不可重复读 语句级快照
  • repeatable read(可重复读):幻读 事务级快照
  • serializable(串行):解决上面所有问题,包括脏写
    更新丢失或者脏写:当两个或者多个事务选择同一行数据修改,有可能发生更新丢失,即最后更新覆盖了其他事务所作的更新。

脏读:事务A读到事务B已经修改但是没有提交的数据。
不可重复读:事务A内部的相同查询语句在不同时刻读出的结果不一致。
可重复读:事务A每次查询结果一致(在 repeatable read隔离级别下,当事务A进行第一次查询时,数据库生成一个快照,每次查询都是查询快照内容。若此时事务B开启事务进行查询,会生成新的事务B的数据库快照,此时事务A和事务B数据库快照数据可能不相同)。
幻读:事务A读到事务B提交的新增数据

select 查询读取快照读,update、insert、delete使用的是当前写
repeatable read隔离级别中:update之后,会跟新当前事务中关于该条记录的快照,其他记录快照不变;在当前事务中无法查询到另一事务的insert的记录,但是可以如果有其他事务对insert的记录进行update,update之后可以查询到,且当前事务可对该insert记录进行update;delete需要测试。

所以,read uncommit、read commit、repeatable read三种都可能出现更新丢失和脏写,可以通过数据库的update、insert、delete避免(例如update tableName set a = a+1 )。其中read commit还可以通过加版本号解决。

测试隔离级别的方法

set tx_isolation = 'serializable';
//set tx_isolation = 'read-uncommitted' or 'read committed' or 'repeatable-read' or 'serializable';
begin;
//sql语句 ... ... 
select * from accountcommit;

http://www.ppmy.cn/embedded/39981.html

相关文章

[单机]成吉思汗3_GM工具_VM虚拟机

稀有端游成吉思汗1,2,3单机版虚拟机一键端完整版 本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是完整可运行的&#x…

java spring 11 推断构造方法 createBeanInstance

1.doCreateBean方法:这一部分 BeanWrapper instanceWrapper null;if (mbd.isSingleton()) {// 有可能在本Bean创建之前,就有其他Bean把当前Bean给创建出来了(比如依赖注入过程中)instanceWrapper this.factoryBeanInstanceCache…

https://是怎么实现的?

默认的网站建设好后都是http访问模式,这种模式对于纯内容类型的网站来说,没有什么问题,但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站,为避免这种情况下发生,所以传统的网站改为https协议,这种协议自己…

DDD架构理论详解

文章目录 一、概念入门1. 概念简介2. DDD的核心理念3. 范式4. 模型5. 框架6. 方法论7. 软件设计的主要活动 二、DDD核心理论1. Domain领域层都包含什么?2. 聚合、实体和值对象3. 仓储,封装持久化数据4. 适配(端口),调用…

从目标检测数据集中选出指定类别的图片和标签

以VOC2007数据集为例,如果我们只想要车辆行人检测,那么只需要从其中选取有行人,自行车,车辆等目标的图片和标签,于是直接上代码: import os import shutil import xml.etree.ElementTree as ETdef extract_…

使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!

要将.mat文件转换成.xlsx格式的Excel文件 第一步:导入必要的库第二步:定义函数来转换.mat文件第三步:调用函数注意事项 要将.mat文件转换成.xlsx格式的Excel文件,并保持文件名一致,你可以使用scipy.io.loadmat来读取.m…

Imitation Learning学习记录(理论例程)

前言 最近还是衔接着之前的学习记录,这次打算开始学习模仿学习的相关原理,参考的开源资料为 TeaPearce/Counter-Strike_Behavioural_Cloning: IEEE CoG & NeurIPS workshop paper ‘Counter-Strike Deathmatch with Large-Scale Behavioural Clonin…

Double 4 VR情景智能互动教学系统在商务旅行课堂中的应用

一、提高学生的学习兴趣 传统的商务旅行课堂教学方式往往是教师讲授理论知识,学生被动接受。这种方式很难激发学生的学习兴趣,而Double 4 VR情景智能互动教学系统则可以通过虚拟现实技术,将商务旅行的场景生动地展示给学生,让学生…