前面了解了MySQL官方解释的MySQL事务,详情看MySQL事务以及隔离级别官方解释。今天写写sql实战了解隔离级别会发生什么现象
网上一大堆都只是停留在文字描述(读已提交会产生xxx,可重复读可避免xxx),本篇博客旨在使用sql实战解释清楚四个隔离级别到底是怎么样的。本文仅使用update、select做实战操作。(delete操作应该会有更复杂的现象。笔者经常遇到删除操作的业务方法报
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
异常)
工具: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);
MySQL设置数据库隔离级别
实战背景,模拟两个并发的事务,在一个事务中做update操作,在另一个事务做查询操作,看看有什么现象。实战过程中需要开启两个MySQL命令窗口,各自代表一个事务。在此称窗口A、窗口B,方便后文描述。窗口A的事务称为事务A,窗口B的事务称为事务B。