暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL每日答题记录

原创 Root__Liu 2023-05-22
182

1、在oracle中,在一个列上使用反向键索引的主要原因是?   D

A、该列常用于降序排序

B、该列包含了许多不同的值

C、该列的取值在一定范围内

D、该列上的值是连续增长的


2、MySQL查询表的统计信息可以通过以下哪些方式?  ABDE

A、通过MySQL.innodb_table_stats

B、通过information_schema.tables

C、show tables;

D、通过information_schema.STATISTICS

E、show table status;


3、MySQL的哪种事务隔离级别可以解决幻读

A、Read uncommited

B、Read commited

C、repeated read

D、Serializable


幻读(Phantom Read): 所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会读取到之前没有读到的数据。

ISO 和 ANIS SQL 标准制定了四种事务隔离级别的标准,分别为:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。


我们先来看下这四种隔离级别的意思。


  • 读未提交: 一个事务还没提交时,它做的变更就能被别的事务看到。

  • 读提交: 一个事务提交之后,它做的变更才会被其他事务看到。

  • 可重复读: 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交的变更对其他事务也是不可见的。

  • 串行化: 顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。


SQL 标准中规定,针对不同的隔离级别,并发事务可以发生不同严重程度的问题,具体情况如下:
( √ 表示可以发生;× 表示不可以发生)


隔离级别

脏读

不可重复读

幻读

读未提交(read uncommitted)

读提交(read committed)

×

可重复读(repeatable read)

×

×

串行化(serializable )

×

×

×

虽然 ISO 和 ANIS SQL 标准制定了四种事务隔离级别的标准,但不是所有数据库厂商都遵循这些标准,比如 Oracle 数据库就不支持读未提交(read uncommitted)和可重复读(repeatable read)的事务隔离级别。

MySQL InnoDB 存储引擎支持4种隔离级别,但与 SQL 标准中定义的不同的是,InnoDB 存储引擎在默认的可重复读(repeatable read)事务隔离级别下,使用 Next-Key Lock 锁的算法,避免了幻读的产生。也就是说 InnoDB 存储引擎在可重复读(repeatable read)的事务隔离级别下,已经可以完全保证事务的隔离性要求,即达到了 SQL 标准中的串行化(serializable )隔离级别的要求。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论