首页 > 试题广场 >

并发操作会带来哪些数据不一致性( )。

[单选题]

并发操作会带来哪些数据不一致性( )。

  • 丢失修改、不可重复读、读脏数据、死锁
  • 不可重复读、读脏数据、死锁
  • 丢失修改、读脏数据、死锁
  • 丢失修改、不可重复读、读脏数据
  1. 丢失修改:多个并发事务对数据的修改是覆盖式的,前面的修改会被后面的覆盖掉
  2. 读“脏”数据:事务 T1 对数据进行修改,然后再回滚,事务 T2 在 T1 回滚前读取了数据,导致 T2 读取的是不正确的数据,称之为“脏”数据
  3. 不可重复读:事务 T1 前后读取数据 2 次,并进行操作,在两次操作期间,其它事务修改了数据,导致 T2 两次操作结果不一样
  4. 产生“幽灵”数据/幻影读(属于不可重复读的一种):事务 T1 按照一定条件读取某些数据,然后其它事务删除/增加了一些记录,当事务 T1 再按相同的条件读取这些数据的时候,会多了/少了一些记录,这样的数据称之为“幽灵”/“幻影”数据
产生数据不一致的主要原因是并发操作破坏了事务的隔离性,所以我们需要进行并发控制。
发表于 2017-09-19 17:13:46 回复(0)
死锁产生的条件,1占有.2,不可抢占,3循环等待 4互斥
发表于 2018-12-24 19:54:36 回复(0)

并发操作会带来如下问题:

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