事务在并发的时候将会出现什么问题:
脏读
一个事务读到另外一个事务还没有提交的数据
说明什么?
说明两个事务都没提交, 读到的数据必然是不准确的, 非持久化的数据.
解决办法:
可以让事务并发
但是其中慢了一点的事务读取数据前, 必须要保证另外的并发的事务提交了,不然就是处于停滞状态.
称之为, 读已提交.(此时发现, 脏读的问题解决了)
不可重复读
一个事务之中, 先后读取同一条记录, 但是两次读取的数据却是不一样的. 称之为不可重复读.
说明什么?
说明事务ABC并发时, 事务A读取的是事务B提交的数据, 但是A依然在运行, 并且A后续操作中, 还有一次读取数据的操作, 但是后面读取的这一次确是C提交的数据. 此时A就很不解, 怎么读到的数据不一致.
解决办法:
不让有处理同一份数据的事务同时处理该数据, 必须要等前一个事务处理了, 才能让下一个事务进行.
幻读
一个事务查询一条记录时, 没有对应的数据, 但是在插入时, 却插入不进去, 发现这个记录存在了.
说明什么?
说明, 当一个事务想要对一个表中插入数据时, 明明原本一开始判断出这个表是没有这行数据的, 但是却被另外一个事务提前插入了, 导致插入失败.
解决办法:
操作同一个表的事务不给并发.