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 )隔离级别的要求。




