数据库隔离级别


数据库隔离级别

mysql数据库隔离级别演示


一、读未提交(Read Uncommitted)

读取到未提交的数据演示如下

select @@tx_isolation #查询当前库的隔离级别
set GLOBAL TRANSACTION ISOLATION level READ UNCOMMITTED #设置数据库隔离级别

设置完隔离级别后需要关闭navicat重新打开
A事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
update tm_case set case_code='333' where id='1'; #3
COMMIT #4

B事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
COMMIT #3

当两个事务都启动后分别执行两个事务的查询记录数据,然后执行A事务的第3步骤接着执行B事务的2步骤发现A事务未提交B事务就能读取到A事务update后的数据。

二、读已提交(Read Committed)

重复之前设置数据库隔离级别的步骤将隔离级别设置为Read Committed

set GLOBAL TRANSACTION ISOLATION level READ COMMITTED

A事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
update tm_case set case_code='444' where id='1'; #3
COMMIT #4

B事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
COMMIT #3

分别启动事务后,当事务A更新数据后未执行提交时,B事务查询出的数据还是之前原先的数据。当A事务执行完commit后B事务重新查询会发现查出的数据为已更新的数据,导致B事务前后两次查询出的结果不一致。

三、可重复读(Repeatable Read)

重复之前设置数据库隔离级别的步骤将隔离级别设置为Repeatable Read

set GLOBAL TRANSACTION ISOLATION level Repeatable Read

A事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
update tm_case set case_code='444' where id='1'; #3
COMMIT #4

B事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
COMMIT #3

分别启动事务后,当事务A执行完update提交后B事务未进行commit时B事务读出的数据永远和之前一致直到B事务commit后再去查询数据才会显示为A更改后的数据

四、Serializable

重复之前设置数据库隔离级别的步骤将隔离级别设置为Serializable

set GLOBAL TRANSACTION ISOLATION level Serializable

A事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
update tm_case set case_code='444' where id='1'; #3
COMMIT #4

B事务:

start TRANSACTION #1
select * from tm_case where id='1'; #2
COMMIT #3

分别启动事务后,你会发现两边可以进行查操作当任何一边的事务进行写操作时都会等待,直到另一边commit后才能进行删改操作

总结

从上可以发现Read Uncommitted,Read Committed,Repeatable Read,Serializable,级别依次递增。
csdn记录菜鸟的成长之路

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值