事务并发可能会引起以下几种问题
1、脏读
事务B读到了事务A未提交的事务。
2、幻读
幻读.png
新增一个用户也会发生幻读,同理。
3、不可重复读
不可重复读.png
和幻读类似,不过是对不可重复读是对数据的更新,而幻读是对数据的新增或者删除。
4、第一类丢失更新(回滚丢失)
回滚丢失.png
事务A的回滚覆盖了事务B的修改操作,造成了数据异常。
5、第二类丢失更新(提交丢失)
提交丢失.png
事务A的提交覆盖了事务B的修改操作,造成了数据异常。和回滚丢失很类似,不过是事务提交覆盖了数据。
为了解决事务的并发问题,mysql提供了四种隔离级别。
隔离级别.png
Repeatable Read(可重读):这是MySQL的默认事务隔离级别,mysql自身解决了幻读和第一类丢失更新的问题。所以mysql只存在提交丢失。
怎么解决提交丢失问题?
1、悲观锁:select ... for update
2、乐观锁:使用版本号机制。
存留的疑问:mysql怎样解决的幻读和第一类丢失更新的问题?
网友评论