事务与锁-mysql

本文深入探讨了数据库事务的隔离级别,包括ReadUncommitted、ReadCommitted、RepeatableRead和Serializable,解析了各种级别下可能出现的问题如脏读、不可重复读、幻读及丢失更新,并提供了相应的解决方案。
锁问题锁问题描述会出现锁问题的隔离级别解决办法
脏读一个事务中会读到其他并发事务未提交的数据,违反了事务的隔离性;Read Uncommitted提高事务隔离级别至Read Committed及以上;
不可重复读一个事务会读到其他并发事务已提交的数据,违反了数据库的一致性要求;可能出现的问题为幻读,幻读是指在同一事务下,连续执行两次同样的SQL语句可能导致不同的结果,第二次的SQL语句可能返回之前不存在的行记录;Read Uncommitted、Read Committed默认的RR隔离级别下 ,解决办法分为两种情况:1、当前读:Next-Key Lock机制对相关索引记录及索引间隙加锁,防止并发事务修改数据或插入新数据到间隙;(详情参见第六章节『锁算法』)2、版本读:MVCC,保证事务执行过程中只有第一次读之前提交的修改和自己的修改可见,其他的均不可见;提高事务隔离级别至Serializable;
丢失更新见章节一中描述;Read Uncommitted、Read Committed、Repeatable Read默认的RR隔离级别下 ,解决办法分为两种情况:1、乐观锁:数据表增加version字段,读取数据时记录原始version,更新数据时,比对version是否为原始version,如不等,则证明有并发事务已更新过此行数据,则可回滚事务后重试直至无并发竞争;2、悲观锁:读加排他锁,保证整个事务执行过程中,其他并发事务无法读取相关记录,直至当前事务提交或回滚释放锁;详情可参看博客:https://segmentfault.com/a/11...

另附数据库大神博客:http://hedengcheng.com/?p=771

转载于:https://www.cnblogs.com/sigmod3/p/9384254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值