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

定义:

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

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

  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集

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值