并发场景
最近做了一些分布式事务的项目,对事务的隔离性有了更深的认识,后续写文章聊分布式事务。今天就复盘一下单机事务的隔离性是如何实现的?
隔离的本质就是控制并发,如果SQL语句就是串行执行的。那么数据库的四大特性中就不会有隔离性这个概念了,也就不会有脏读,不可重复读,幻读等各种问题了
对数据库的各种并发操作,只有如下四种,写写,读读,读写和写读
写-写
事务A更新一条记录的时候,事务B能同时更新同一条记录吗?
答案肯定是不能的,不然就会造成脏写问题,那如何避免脏写呢?答案就是加锁
读-读
MySQL读操作默认情况下不会加锁,所以可以并行的读
读-写 和 写-读
基于各种场景对并发操作容忍程度不同,MySQL就搞了个隔离性的概念。你自己根据业务场景选择隔离级别。
√ 为会发生,×为不会发生
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
read uncommitted(未提交读) | √ | √ |