❒ 并发事务问题
✔ 脏读:一个事务读到另外一个事务还没有提交的数据。
✔ 不可重复读:事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
✔ 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”
解决方案:对事务进行隔离
❒ 隔离级别
✔ 读未提交 (脏读、不可重复读、幻读):可能出现任何事务并发问题,一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。不能解决脏读问题。性能最好,但是因为脏读都没有解决,不建议使用。
✔ 读已提交 (Oracle的默认隔离级别,不可重复读、幻读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(所以还会导致两次统计数据不一致,所以没有解决幻读问题),而且能看到其他事务已经提交的对已有记录的更新(所以没有解决不可重复读问题)。
✔ 可重复读(mysql默认隔离级别,幻读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(所以没有解决幻读问题),但是不能看到其他其他事务对已有记录的更新(解决了不可重复读和脏读问题)。这种隔离级别防止了脏读和不可重复读;不能避免幻影读问题。
✔ 串行化 (性能太差):一个事务执行的时候不允许别的事务并发执行,对同一数据的访问是串行的,即让事务排队一个一个的访问,所以就没有了并发现象;是最严格的隔离级别,不会出现以上所有的问题。但是这样性能最差,因此应该避免这种隔离级别。