0


【面试重点】事务隔离级别、锁(后有实验演示)

定义:

事务隔离级别介绍:多个连接开启各自的事务操作数据库中数据是,数据库系统要负责系统隔离操作,以确保各个连接在获取数据时的准确性

如果不考虑隔离性,可能会引发以下问题

  1. 脏读:当b事务读到了a事务尚未提交的修改,则产生脏读
  2. 不可重复读:同一查询在a事务中进行多次,由于其他提交事务所做的修改或者删除,每次返回不同的结果集,则发生不可重复读
  3. 幻读:当a事务提交事务后,在b事务内本不应该能读到a事务内的更改,若是读到了便是b产生幻读

实验理解隔离级别

1、以管理员方式打开两个控制台,成为表1和表2

2、两表都进入数据库

mysql -u root -p

3、查看两表的隔离级别

SELECT @@tx_isolation; 

两表隔离级别默认可重复读

4、将表b的隔离级别更改成为READ UNCOMMITTED

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

5、a、b两表启动事务

start transaction;

两个表都进入自己的库,我的数据库是tmp

use tmp

创建表

CREATE TABLE `account`(
    id INT,
    `name` VARCHAR(32),
    money INT);

6、开始进行测试

对表A进行插入操作 insert into account values(100,'tom',1000);

查看b表 select *from account,发现b表中能查看到表a的插入,而a表尚未对该修改进行提交,这种情况便是脏读。

脏读:当b事务读到了a事务尚未提交的修改,则产生脏读

在a表中进行如下操作

update account set money = 800 where id=100;

insert into account values(200,'jack',2000);

commit;

在a表中进行多次插入操作,事务提交后,查看b表

可知,在a表提交事务后,b表也受到了a表的影响,进行相应的修改,这便是幻读

幻读:当a事务提交事务后,在b事务内本不应该能读到a事务内的更改,若是读到了便是b产生幻读

7、更改b的隔离级别(读以提交),继续测试

两表的事务都进行提交commit;

对b表进行修改级别,读已提交

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

两表开启事务

start transaction;

在a表中添加

insert into account values(300,'xjh',3000);

查看a表

查看b表

b中并没有该数据,证明b的级别(读已提交)并不会出现脏读

对a表进行修改并提交

update account set money =1800 where id=200;

commit;

查看b表,发现b表又读到a表增加的与修改的数据,即出现了不可重复读和幻读。

8、对b表级别修改成可重复读(REPEATABLE-READ)

老操作,两表都commit提交事务,然后更改b表级别

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

两表再重新进入事务START TRANSACTION;

在a表中插入数据

insert into account values(400,'wxy',6000);

update account set money =100 where id=300;

查看a,b表,发现a表的修改并未对b表又影响,即b为产生脏读现象

在a表中输入commit;提交a表,查看b表;

发现a提交之后,b表内容仍然为产生影响,即b表不会产生不可重复读和幻读现象;

9、对b表隔离级别进行修改,改成可串行化(SERIALIZABLE)

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

对a表修改

insert into account values(500,'zjl',80000);

update account set money =900 where id=300;

此时a表并未进行提交操作,在b表进行查询操作

可以发现,b表卡在select *from account;最后会返回

原因是b表有锁,当a表对事务进行修改时,如果a表并未提交该操作,则b表无法打开。当a表commit提交该事务时,b表才可以查看该表。

本实验显示参照B站韩顺平MySQL 71集,72集

标签: mysql 数据库

本文转载自: https://blog.csdn.net/weixin_45847088/article/details/125624426
版权归原作者 西楚小王八 所有, 如有侵权,请联系我们删除。

“【面试重点】事务隔离级别、锁(后有实验演示)”的评论:

还没有评论