首页 > 数据库 >MySQL事务状态判断

MySQL事务状态判断

时间:2024-04-12 22:44:48浏览次数:26  
标签:事务 判断 TX -- 更新 MySQL djj

MySQL事务状态判断

前置

MySQL的默认隔离级别是: 可重复读(REPEATABLE READ)

可重复读隔离级别下,事务中的SELECT操作会看到快照数据,也就是事务开始时刻的数据状态。此隔离级别可以防止脏读和不可重复读,但可能会有幻读的问题出现。

问题描述

表结构

create table djj
(
    name    varchar(100) null,
    account int          null
);

表数据

在事务开始前,表djj​中有一条记录:

name account
djj 50

脚本A和脚本B

脚本A和脚本B都是对表djj​进行的操作。脚本A将账户余额更新为40,而脚本B将账户余额更新为60。

操作流程

按照给定的操作流程,两个事务交错执行,如下:

flowchart TD ATXStart[A.TX Start] --> BTXStart[B.TX Start] BTXStart --> Aa[A.a] Aa --> Ab[A.b] Ab --> Ba[B.a] Ba --> Bb[B.b] Bb --> Ac[A.c] Ac --> ATXCommit[A.TX Commit] ATXCommit --> Bc[B.c] Bc --> BTXCommit[B.TX Commit]
  1. A.a : 查找到的结果是 50
  2. A.b : 成功执行更新,账户余额变更为40
  3. B.a : 查找到的结果是 50(因为B事务的快照是在A事务提交前的状态)
  4. B.b : 此时因为A事务尚未提交,B事务的更新操作会等待A事务释放行锁
  5. A.c : 此时的结果是40(A事务可以看到自己的更新)
  6. A.TX Commit: A事务提交,释放行锁
  7. B.b : 执行成功,账户余额更新为60(B事务现在可以获取先前被A事务持有的行锁)
  8. B.c : 结果为60(B事务在提交前看到的是自己的更新)

注意

  1. 在可重复读隔离级别下,读操作不会看到其他未提交事务的更改(防止脏读),但写操作会等待其他事务释放锁(行锁或表锁),然后写入最新的数据。
  2. 死锁通常发生在多个事务试图以不同的顺序锁定资源时,例如,当两个事务都试图更新同一行数据,或者在使用SELECT FOR UPDATE​时。在这种情况下,MySQL会自动检测死锁并回滚一个事务来解决问题。

标签:事务,判断,TX,--,更新,MySQL,djj
From: https://www.cnblogs.com/pDJJq/p/18132278/mysql-transaction-status-judgment-z2n2gmk

相关文章

  • MySQL 04-EMOJI 表情与 UTF8MB4 的故事
    拓展阅读MySQLViewMySQLtruncatetable与delete清空表的区别和坑MySQLRulermysql日常开发规范MySQLdatetimetimestamp以及如何自动更新,如何实现范围查询MySQL06mysql如何实现类似oracle的mergeintoMySQL05MySQL入门教程(MySQLtutorialbook)MySQL04-E......
  • linux环境安装——mysql集群安装复习——主从复制
    1、首先安装mysql: mkdir-p/soft/mysql8mkdir-p/evir/mysql8执行上传文件操作rpm-qa|grepmariadb查询是否有这个文件rpm-e--nodepsmariadb-libs进行删除rpm-qa|grepmariadb查询这个文件是否删干净tar-xf/soft/my......
  • mysql-子查询的学习
    子查询由一个具体的需求,引入子查询谁的工资比Abel的高SELECT*fromemployeesWHEREsalary>(SELECTsalaryFROMemployeesWHERElast_name='Abel')--自连接SELECTe2.*......
  • MySQL数据库无法远程连接的解决办法
    MySQL数据库无法远程连接的解决办法 远程登陆数据库的时候出现了下面出错信息:ERROR2003(HY000):Can'tconnecttoMySQLserveron'xxx.xxx.xxx.xxx',经过今天下午的反复纠结,关于MySql数据库无法远程连接的问题可以归结为以下几点:1).没有授予相应的......
  • 分布式事务Seata-AT模式的事务提交和事务回滚全过程详解
    分布式事务Seata1.本地事务2.分布式事务3.实现思路:两阶段提交协议(2PC)3.1基础理解3.22PC的隐患4.Seata4.1Seata是什么4.2Seata的三大角色4.3Seata一次事务的生命周期4.4SeataAT模式的设计思路4.4.1设计思路4.4.1.1一阶段4.4.1.2二阶段4.4.1.3写隔离4.4.1.4读隔离4.......
  • mysql 索引设计原则
    适合添加索引的情况1.字段的数值有唯一性的限制索引本身可以起到约束的作用,比如唯一索引、主键索引都可以起到唯一性约束的,因此我们在创建数据表时,如果某个字段时唯一的,就可以直接创建唯一性索引或主键索引。不要以为唯一索引影响了insert的速度,这个速度损耗可以忽略不计,单体......
  • js 判断空对象
    进行JavaScript中判断空对象可以有以下几种实现方法:使用Object.keys()方法:使用该方法可以获取对象的所有属性名,然后判断属性名的数量是否为0。如果为0,则表示对象为空functionisEmptyObject(obj){returnObject.keys(obj).length===0;}2、使用for...in循环:通......
  • MySQL基础
    1,初识SQL语句SQL语句:操作文件夹(库) 增 createdatabasedb1charsetutf8; 查 showcreatedatabasedb1; showdatabases; 改 alterdatabasedb1charsetgbk; 删 dropdatabasedb1;操作文件(表) 切换文件夹:usedb1; 查看当前所在文件夹:selectdatabase(); ......
  • mysql修改密码报错:Your password does not satisfy the current policy requirements
    参考https://blog.csdn.net/u013449046/article/details/106455041这是mysql初始化时,使用临时密码,修改自定义密码时,由于自定义密码比较简单,就出现了不符合密码策略的问题。密码策略问题异常信息:ERROR1819(HY000):Yourpassworddoesnotsatisfythecurrentpolicyrequ......
  • MySQL的CDC数据实时同步
    MySQL的CDC数据实时同步 背景近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台。优先级比较高的一个任务就是需要近实时同步业务系统的数据(包括保存、更新或者软删除)到一个另一个数据源,持久化之前需要清洗数据并且构建一......