1前提:事务并发
2.脏读:A读取数据D,修改数据D,B读取D,A回滚。
解决:A读之前加一个写锁,直到事务结束才释放,各事务读之前加读锁,防止被修改,对应数据库隔离等级2(默认等级)
3.不可重复读:因为读锁获取后,并不会持续到事务结束才释放,有可能中途有别的事务获取写锁,从而导致事务2次读取同一个数据不一致。
解决方法:加了读锁,事务结束才结束,和脏读一样,锁的是所读取的数据。
4.幻读:A读取数据D,B插入数据D1,D1可被A用同样的sql读出,所以A第二次读的时候还多出D1.。
解决方法:范围锁,其实就是锁表,完全串行。
其实不可重复读和幻读在有些情况是可以接收的,看业务需求把