事务 学习笔记

讲解事务前我们先来看一张图:
事务 学习笔记
这张图讲述了数据库的隔离级别和预防脏读、不可重复读,幻读的对应关系。
那么mysql 默认的数据库隔离级别是Repeatable Read ,这个级别下就不会出现脏读和不可重复读。
而Oracle和Sqlserver 的默认隔离级别是 Read committed 。这种级别不会出现脏读。
下面说下脏读、不可重复读、幻读出现的场景。
1、脏读:
前提数据库的隔离级别为read uncommitted 读未提交
初始金额1000,事务A,更改了金额 500,但并没有提交到数据库。这时事务B过来查到了500。那么这就是脏读,读到了别人未提交事务的数据
2、不可重复读
将数据库的隔离级别设置为Read Committed,在同一个事务中两次查询的结果不一致。
例如:A,B 各有500块。此时事务1,操作A向B 转500块,同时事务2查看B有500块,在事务1提交之后,事务2再一次查看,B价格变为1000.那么
这种情况就是不可重复读。
3、幻读:
前提将隔离级别提升到Repeatable Read ,可以避免脏读和不可重复读。
同样a提交事务,b去读数据,发现依旧是原来的钱,只能结束当前的事务,再开一个新事务才能读到变化的数据。

4、seriizable隔离级别不常用
如果我们设置了seriizable串行化,就相当于锁表,某一时间内只允许一个事务访问该表。