当前位置: 首页 > news >正文

MySQL场景测试题

第一题

软件环境描述:

Mysql V5.7.30 Innodb RR隔离级别

表结构以及数据描述:

(1)t_user用户表,表格如下:

CREATE TABLE t_user (
id int(10) NOT NULL,
name varchar(100) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
(2)表里面存量数据

业务场景描述

事务1

事务2

begin;

select * from t_user

begin;

insert into t_user values (20,'bole');

commit;

update t_user set name='zhuge' where id=20;

select count(*) from t_user

commit;

问题: 请问事务1 的第二次(红色sql)查询结果是什么?为什么?

4,事务2新增数据提交之后,事务1更新的当前读是可以操作成功,根据可见性规则:当前事务更新的数据对当前事务是可见的。所以事务1的第2个查询是可以读到id=20这条数据,再加上快照里面的3条数据,一共就是4条数据。

第二题

软件环境描述:

Mysql V5.7.30 Innodb RR隔离级别

表结构以及数据描述:

(1)t_user用户表,表格如下:

CREATE TABLE t_user (
id int(10) NOT NULL,
name varchar(100) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;

(2)表里面存量数据

业务场景描述

事务1

事务2

事务3

begin;

insert into t_user values (20,'bole');

begin;

insert into t_user values (20,'bole'); 

begin;

insert into t_user values (20,'bole');

Rollback;

问题: 请问三个事务是否能够正常执行?说说你的理解。

事务1正常执行,事务2和3形成死锁,有一个事务会被中止。

  1. 1、事务1会给表id20行加入X锁
  2. 2、事务2、3给id20行加入X锁发现这行记录已经被锁了,由于主键唯一性,事务2、3会转为S锁(注意是X->S,不会给该记录行加上锁,这时事务1已经给id20行加上了X锁)
  3. 3、当事务1回滚,事务2、3同时持有id20行的S锁,并且因为存储引擎为了保证插入数据的操作安全性,将S锁升级为GAP锁(间隙锁)
  4. 4、与此同时,事务2、3同时向表id20行申请插入意向锁(IX锁),因为此时两个事务都持有S锁,那么因为IX锁与S锁不兼容,所以两个事务互相等待对方释放S锁,形成了死锁
  5. 5、数据库发现死锁后,自动中止其中一个事务。

答案拆解

首先我们需要知道锁的关系

​​​​​​​http://t.csdnimg.cn/FP6Adicon-default.png?t=N7T8http://t.csdnimg.cn/FP6Ad

因为主键唯一性,会将原本需要加入X锁的操作转变为S锁

根据锁的关系,我们知道IX与S锁是不兼容的,因此会造成死锁!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【wsl2】从C盘迁移到G盘
  • MySQL高阶练习题1- 寻找面试候选人
  • 网络编程(学习)2024.8.27
  • 书生大模型实战营闯关记录----第十一关:LMDeploy 量化部署进阶实践 KV cache量化部署,W4A16 模型量化和部署
  • 数字化转型中的数据应用:挑战、机遇与追赶之路
  • sql高并发如何解决
  • 【vue3】wangEditor 5在vue3中的使用
  • 基于my Batis优化图书管理系统(总)
  • 【搜索引擎】ElasticSearch 7.x版本
  • ACL基础笔记
  • ceph-rgw zipper的设计理念(1)
  • ARCGIS 纸质小班XY坐标转电子要素面(2)
  • validationtools中按键测试选项光标移除
  • Spring Boot集成Stripe快速入门demo
  • 使用dx工具将jar和class打包成dex
  • 【Leetcode】104. 二叉树的最大深度
  • 【知识碎片】第三方登录弹窗效果
  • Consul Config 使用Git做版本控制的实现
  • Electron入门介绍
  • Facebook AccountKit 接入的坑点
  • Joomla 2.x, 3.x useful code cheatsheet
  • Laravel Telescope:优雅的应用调试工具
  • QQ浏览器x5内核的兼容性问题
  • spring boot下thymeleaf全局静态变量配置
  • Spring声明式事务管理之一:五大属性分析
  • Vue--数据传输
  • 闭包,sync使用细节
  • 大主子表关联的性能优化方法
  • 简单数学运算程序(不定期更新)
  • 简单易用的leetcode开发测试工具(npm)
  • 今年的LC3大会没了?
  • 经典排序算法及其 Java 实现
  • 使用parted解决大于2T的磁盘分区
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Redis 实现计数器和限速器的
  • # Kafka_深入探秘者(2):kafka 生产者
  • (1) caustics\
  • (145)光线追踪距离场柔和阴影
  • (9)目标检测_SSD的原理
  • (floyd+补集) poj 3275
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (接口封装)
  • (六)激光线扫描-三维重建
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转载)hibernate缓存
  • .net和php怎么连接,php和apache之间如何连接
  • //解决validator验证插件多个name相同只验证第一的问题
  • /etc/fstab和/etc/mtab的区别
  • [10] CUDA程序性能的提升 与 流
  • [100天算法】-不同路径 III(day 73)
  • [1525]字符统计2 (哈希)SDUT
  • [Android 13]Input系列--获取触摸窗口
  • [Android Pro] Notification的使用