首页 > 试题广场 >

RDBMS 通常会实现不同的隔离级别,有些数据库中的隔离级别

[不定项选择题]
RDBMS 通常会实现不同的隔离级别,有些数据库中的隔离级别是可随时调整的,那么关于隔离级别以下说法正确的是()
  • ANSI/ISO SQL92 标准定义了四种隔离级别,分别是 Read uncommitted、Serializable、Repeatable read、Read committed
  • 在同样的运行环境下,不同隔离级别的性能从高到低的顺序是 Read uncommitted > Read committed > Repeatable read > Serializable
  • Oracle 数据库采用的默认隔离级别和MySQL 实现的 READ COMMITTED 相似,这个隔离级别下不会出现脏读(Dirty Read)和不可重复读(Non-Repeatable Reads),但会有幻读(Phantom Reads)
  • Serializable 隔离级别能够完全防止脏读(Dirty Read)、不可重复读(Non-Repeatable Reads)和幻读(Phantom Reads)
#8头像 #8
所以这题选ABD
编辑于 2019-09-18 10:16:24 回复(5)
第一级别:读未提交(read uncommitted)
                对方事务还没有提交,我们当前事务可以读取到对方未提交的数据。
                读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据。
第二级别:读已提交(read committed)
                对方事务提交之后的数据我方可以读取到。
                这种隔离级别解决了: 脏读现象没有了。
                读已提交存在的问题是:不可重复读
第三级别:可重复读(repeatable read)
                这种隔离级别解决了:不可重复读问题。
                这种隔离级别可能存在的问题是:读取到的数据是幻象。
第四级别:序列化读/串行化读(serializable)
                解决了所有问题。
                效率低。需要事务排队。

注意:可重复读隔离级别有时候能避免幻读有时候不能避免。连续多次快照读,ReadView会产生复用,没有幻读问题。当两次快照读之间存在当前读,ReadView会重新生成,导致幻读!!!
发表于 2021-09-07 09:51:53 回复(0)

在MySQL中 InnoDB 存储引擎实现了四个隔离级别(其他存储引擎不支持事务),用以控制事务所做的修改,并将修改通告至其它并发的事务,现在一般有4个,一般用第一级别:

  • 第一级别:读未提交(read uncommitted),即对方事务没有提交,但是已经读到数据,会造成读脏数据。

  • 第二级别:读已提交(read commintted),即对方事务已经提交,我方可以读到数据,可以解决读脏数据,但是会造成不可重复读数据

  • 第三级别:可重复读(repeatable read),可以解决不能重复读数据,但是可能会造成幻读

  • 第四级别:序列化读/串行化读(serializable),可以解决所有问题,但是效率低

mysql默认的隔离级别为 可重复读。oracle默认的隔离级别是读已提交

隔离级别 脏读(Dirty Read) 不可重复读(Non-repeatable Read) 幻读(Phantom Read)
读未提交(read uncommitted) Yes Yes Yes
读已提交(read commintted NO Yes Yes
可重复读(repeatable read) NO NO Yes
序列化读/串行化读(serializable) NO NO NO
发表于 2021-08-22 15:50:19 回复(0)
read committed级别允许不可重复读,C错
发表于 2020-09-07 23:52:26 回复(0)
mysql默认是repeatble read比oracle严格,oracle是read committed
发表于 2021-06-12 16:58:45 回复(0)
Serializable 可以完全解决脏读 幻读 不可重复读的问题
发表于 2024-02-23 21:24:30 回复(0)
read committed级别允许不可重复读
发表于 2021-07-21 19:18:03 回复(0)
mysql不可重复读,Oracle更低
发表于 2021-03-09 16:48:02 回复(0)