隔离级别:使用debug程序与mysql客户端中模拟测试各个隔离级别对数据库的加锁的情况!

本文探讨了数据库的事务隔离级别,包括从可重复读到读未提交的设置,以及它们对数据读取的影响。重点解释了幻读的概念,即在一个事务中,不同时间查询可能会看到不同的行。此外,还提到了可重复读如何防止行锁问题,并通过示例说明了在不同隔离级别下,如序列化,如何处理特定操作。文章提供了链接深入理解幻读,并通过实际操作展示了设置事务隔离级别的过程。
摘要由CSDN通过智能技术生成

先将数据设置为未提交可以读取的状态:

mysql> select @@version; ±----------+ | @@version | ±----------+ | 8.0.19 | ±----------+ 1 row in set (0.00 sec) mysql> show variables like ‘autocommit’; ±--------------±------+ | Variable_name | Value | ±--------------±------+ | autocommit | ON | ±--------------±------+ 1 row in set, 1 warning (0.00 sec) mysql> set autocommit=0 -> ; Query OK, 0 rows affected (0.00 sec) mysql> select @@transaction_isolation; ±------------------------+ | @@transaction_isolation | ±------------------------+ | REPEATABLE-READ | ±------------------------+ 1 row in set (0.00 sec) mysql> set session transaction isolation level read uncommitted; Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

select @@transaction_isolation;

set session transaction isolation level read uncommitted;

SELECT * from mmall_product where mmall_product.id = 42

在这里插入图片描述

默认的隔离级别之下是不能查询到为提交的值的
在这里插入图片描述

关于提交后可读的隔离级别:

是使用两个session进行模拟的,脏读实际上也是两个session进行模拟:
在这里插入图片描述

将数据库设置为可重复读:

关于幻读的理解:

在这里插入图片描述
https://www.jianshu.com/p/c921f995d58b

可重复读解决的是行锁的问题,不能读取与修改某
通过debug:测试确定可重复读表的行是加了写锁的,只能读不能写!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

是不能更新数据的:
在这里插入图片描述
幻读是在一个事务开启后,其他的线程能对表插入或者更新其他行的数据,只是不能对指定的表的行进行操作,(例如对 id = 41 的行加了事务,其他行是不受约束的)
在这里插入图片描述

将数据库设置为序列化:

set session transaction isolation level serializable;
对数据库中id = 41这行进行操作:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值