MySql数据库的事务隔离级别学习

一、Mysql事务的隔离级别分为

  • 读未提交
  • 读已提交
  • 可重复读
  • 串行化

1、读未提交

  事务A可以读取到事务B未提交的数据

  设置MySql数据库的隔离级别

set SESSION TRANSACTION ISOLATION LEVEL READ uncommitted

  查看当前数据库事务隔离级别

select @@tx_isolation;

 

 

 

  客户端A使用事务查询数据

BEGIN
SELECT * FROM tb_demo

  查询结果

   客户端B使用事务更新(并未提交事务)

BEGIN
update tb_demo set math = 4000

  客户端A再次查询得到结果,可以发现A可以查询到B未提交的数据

 

  读未提交会产生幻读,不可重复读,脏读的问题

 2、读已提交

  设置事物的隔离级别为读已提交

set SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

  客户端A使用事务查询数据

BEGIN
SELECT * FROM tb_demo

  查询结果

   客户端B使用事务更新(并未提交事务)

BEGIN
update tb_demo set math = 100

  客户端A再次查询得到结果,可以发现A查询不到B未提交的数据

   客户端B提交事务

COMMIT

  客户端A再次查询结果(客户端A能够读取到B已经提交的数据)

  读已提交可以解决脏读 存在不可重复读,幻读问题

 3、可重复读

  设置数据库的隔离级别

set session TRANSACTION ISOLATION LEVEL REPEATABLE read

  客户端A查询数据

begin
select * from tb_demo

 

 

   客户端B更新数据

BEGIN
update tb_demo set math = 100

  此时使用客户端A查询数据(数据为之前查询到的数据)

select * from tb_demo

 

   客户端B提交事务

commit

  此时使用客户端A再次查询数据(数据依然为之前查询到的数据)在整个事务中读取到的数据不会改变,所以称为可重复读

select * from tb_demo

  可重复读解决脏读,不可重复读问题,存在幻读问题

4、串行化

客户端B需等待客户端A事务完成提交后才可继续进行。是完整的隔离级别,会锁定对应的数据表格,因而会有效率的问题。

 

posted @ 2021-03-11 11:28  行人~  阅读(38)  评论(0编辑  收藏  举报