MySQL事务隔离级别实战演示

MySQL事务隔离级别实战演示

文章目录

1 问题背景

前面了解了MySQL官方解释的MySQL事务,详情看MySQL事务以及隔离级别官方解释。今天写写sql实战了解隔离级别会发生什么现象

2 前言

网上一大堆都只是停留在文字描述(读已提交会产生xxx,可重复读可避免xxx),本篇博客旨在使用sql实战解释清楚四个隔离级别到底是怎么样的。本文仅使用update、select做实战操作。(delete操作应该会有更复杂的现象。笔者经常遇到删除操作的业务方法报MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction异常)

3 实战环境

工具:MySQL8.0、Navicat。

表:设计了一个表做实战,如下所示:.

CREATE TABLE `t_product` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品名',
  `quantity` int DEFAULT NULL COMMENT '数量',
  `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

数据:往表里插入一条数据,如下所示:

insert into t_product (name, quantity) values ("MYSQL事务实战", 100); 

4 必备知识

MySQL设置数据库隔离级别

5 读未提交实战

实战背景,模拟两个并发的事务,在一个事务中做update操作,在另一个事务做查询操作,看看有什么现象。实战过程中需要开启两个MySQL命令窗口,各自代表一个事务。在此称窗口A、窗口B,方便后文描述。窗口A的事务称为事务A,窗口B的事务称为事务B。

MySQL事务隔离级别实战演示

6 读已提交实战

MySQL事务隔离级别实战演示

7 可重复读实战

MySQL事务隔离级别实战演示

8 串行化实战

MySQL事务隔离级别实战演示
MySQL事务隔离级别实战演示
MySQL事务隔离级别实战演示

上一篇:mysql创建表时报错:there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE cl


下一篇:hive&mysql正则过滤乱码