数据库事务级别学习笔记

数据库事务行为

脏读
脏读是在事务中 一个会话还未提交操作,然而在另一个会话中已经可以看到操作后的结果。
这个结果随着最后的提交或者回滚也会发生变化
不可重复读
不可重复读是指当一个会话去读取数据时,读到的数据一定是最后一次事务提交的结果
这个大多情况不属于问题,但是当两个事务会话同时访问一条数据,可能会出现,
读取到的数据一样,通俗来讲就是,在一个事务会话中,当你操作后,即使没有提交,
在当前会话查询也是一样可以看到自己操作后的数据,但是此时,存在另一个事务会话
也操作了数据,并且提交,那么当前会话看到的就是另一个事务会话操作后的数据
可能会认为自己操作没有成功。
虚读(幻读)
幻读和不可 重复读是很相似的,都是在存在多个事务会话的时候存在的问题,

很多人容易搞混不可重复读和幻读,确实这两者有些相似。但不可重复读重点在于update和delete,而幻读的重点在于insert。

避免不可重复读需要锁行就行

避免幻影读则需要锁表
注意
如果使用锁机制来实现这两种隔离级别,在可重复读中,该sql第一次读取到数据后,就将这些数据加锁,其它事务无法修改这些数据,就可以实现可重复 读了。但这种方法却无法锁住insert的数据,所以当事务A先前读取了数据,或者修改了全部数据,事务B还是可以insert数据提交,这时事务A就会 发现莫名其妙多了一条之前没有的数据,这就是幻读,不能通过行锁来避免。需要Serializable隔离级别 ,读用读锁,写用写锁,读锁和写锁互斥,这么做可以有效的避免幻读、不可重复读、脏读等问题,但会极大的降低数据库的并发能力。

所以说不可重复读和幻读最大的区别,就在于如何通过锁机制来解决他们产生的问题。
————————————————
版权声明:本文为CSDN博主「PasserBy*_*」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38545713/article/details/79779265

数据库事务四大特性

原子性
隔离性
一致性
持久性

数据库事务级别

Read uncommitted(读未提交)
读未提交 可以理解为任何情况都可以读事务中还未提交的操作,即在A中操作了A1数据
即使A还没提交,B也可以看到A1数据发送改变
Read committed(读已提交)
同理 读已提交 可以理解为只能读已经提交的事务结果,即在A中操作了A1数据,
如果A没有commit,那么在B中是无法看到A操作的结果。此时可以避免脏读的发生
Repeatable read(可重复读)
可重复读解决了不可重复读的事情,理解为A操作了数据,没有提交,在A中可以看到
操作后的内容,然后在B中如果操作了数据,那么b也能看到自己操作的数据,
但是最后的数据是被共同的结果,如果存在操作同一条数据,则会以最后一次提交为最终结果。
Serializable(串行化)
串行化可以避免脏读 不可重复读,幻读的发生。
注意
1.read uncommitted

可以看到未提交的数据(脏读),举个例子:别人说的话你都相信了,但是可能他只是说说,并不实际做。

 

2.read committed

读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。用读写的观点就是:读取的行数据,可以写。

 

3.repeatable read(MySQL默认隔离级别)

可以重复读取,但有幻读。读写观点:读取的数据行不可写,但是可以往表中新增数据。在MySQL中,其他事务新增的数据,看不到,不会产生幻读。采用多版本并发控制(MVCC)机制解决幻读问题。

 

4.serializable

可读,不可写。像java中的锁,写数据必须等待另一个事务结束。
————————————————
版权声明:本文为CSDN博主「Alex许恒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuheng8600/article/details/79869669

查看和操作隔离级别

查看
SELECT @@tx_isolation;
第一个可能会报错,因为数据库版本问题
SELECT @@global.transaction_isolation;
设置
设置当前会话隔离级别
set session transaction isolation level repeatable read;
设置系统会话隔离级别
set global transaction isolation level repeatable read;
注意
隔离级别设置必须在事务开启前设置

参考博客

https://blog.csdn.net/xuheng8600/article/details/79869669
https://blog.csdn.net/l1394049664/article/details/81814090
https://blog.csdn.net/qq_38545713/article/details/79779265
https://blog.csdn.net/JStana/article/details/113872200
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值