并发操作会带来哪些数据不一致性( )。
并发操作会带来如下问题:
- 脏读是指在并***况下,当前事务可以读到其它事务未提交到数据 - 脏读违反了数据库事务的隔离性要求 - InnoDB 中脏读的发生条件是事务的隔离级别为 READ UNCOMMITED
- 不可重复读是指同一个事务内,多次读取同一个数据集合结果不一致现象 - 不可重复读违反了数据库事务的一致性要求 - InnoDB 通过 next-key 算法来避免不可重复读现象 - 为了避免不可重复读现象发生,需要将事务的隔离级别设置为 REPEATABLE READ 以上
- 丢失更新是指一个事务的更新操作会被令一个事务的更新操作覆盖 - 在当前数据库任何隔离级别下,都不会导致数据库丢失更新现象发生
幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行 当用户再读取该范围的数据行时,会发现有新的“幻影” 行。一般数据库并发问题的解决是通过锁以及隔离级别来解决的,如果想具体了解 Mysql 存储引擎中 InnoDB 的锁和事务的实现原理,可以看一下这两篇文章 InnoDB 存储引擎的锁学习 和 InnoDB 存储引擎的事务学习