网络安全--mysql中事务锁以及事务隔离解析

一、事务锁

1、个人理解:

专一性和历史性,例如一个男人历史上是花心的,但当他成长后开启begin和update后变的专一了,多项事务也影响不到他了,直到水泥封心,只可被一个人查询在此我们进入正题:

一、我们建立docker下的mysql镜像创建表格如下并且开启多会话进行实验: 

网络安全--mysql中事务锁以及事务隔离解析_第1张图片

 网络安全--mysql中事务锁以及事务隔离解析_第2张图片

 2、插入数据正常查询比较

第一事务:

网络安全--mysql中事务锁以及事务隔离解析_第3张图片

 第二事务:

网络安全--mysql中事务锁以及事务隔离解析_第4张图片

 开启事务锁后比较:

网络安全--mysql中事务锁以及事务隔离解析_第5张图片

网络安全--mysql中事务锁以及事务隔离解析_第6张图片

 很明显在我没有提交事务的时候,数据被锁住了无法查询,除非你提交数据才可查询

 网络安全--mysql中事务锁以及事务隔离解析_第7张图片

 二、共享锁

开启共享锁的时候lock in shar mode;

数据是可读的,但是是不能写的

三、mysql 有四级事务隔离级别 

读未提交 READ-UNCOMMITTED | 0:存在脏读,不可重复读,幻读的问题

读已提交 READ-COMMITTED | 1:解决脏读的问题,存在不可重复读,幻读的问题

 可重复读 REPEATABLE-READ | 2:解决脏读,不可重复读的问题,存在幻读的问题,默认隔离级别,使用 MMVC机制 实现可重复读

序列化 SERIALIZABLE | 3:解决脏读,不可重复读,幻读,可保证事务安全,但完全串行执行,性能最低

解释:
脏读(Dirty Read):
脏读发生在一个事务中读取了另一个事务未提交的数据。也就是说,一个事务读取了另一个事务的临时数据,但是这些数据可能会在后续操作中被回滚,从而导致读取到的数据实际上是无效的。
例如,一个事务 A 更新了某一行数据,但还没有提交。此时另一个事务 B 来读取了这个数据,然后事务 A 回滚了操作。这样事务 B 读取到的数据就是无效的,因为它实际上并不应该被提交。

幻读(Phantom Read):
幻读是指在一个事务中,同一查询在不同时间执行时,得到的结果集不一致。通常,这是因为另一个事务插入了新的数据行或删除了数据行,导致查询结果不一致。

解决幻读问题:

为什么说 MVCC 和 Gap Lock 解决了 MySQL 的幻读问题 - piperck - 博客园 (cnblogs.com)

你可能感兴趣的:(mysql,数据库)