SQL 高级面试题

1. 什么是事务

参考答案

    数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。

2. 事务特性有哪些?

参考答案

    原子性:事务是一个完整的操作。事务的各元素是不可分的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。
    一致性:事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。
    隔离性:对数据进行修改的所有并发事务是彼此隔离的, 这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
    持久性:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。

3. 事务并可能会出现什么问题?

参考答案

    脏读:事务 A 更新了数据,但还没有提交,这时事务 B 读取到事务 A 更新后的数据,然后事务 A 回滚了,事务 B 读取到的数据就成为脏数据了。
    不可重复读:事务 A 对数据进行多次读取,事务 B 在事务 A 多次读取的过程中执行了更新操作并提交了,导致事务 A 多次读取到的数据并不一致。
    幻读:事务 A 在读取数据后,事务 B 向事务 A 读取的数据中插入了几条数据,事务 A 再次读取数据时发现多了几条数据,和之前读取的数据不一致。
    丢失修改:事务 A 和事务 B 都对同一个数据进行修改,事务 A 先修改,事务 B 随后修改,事务 B 的修改覆盖了事务 A 的修改。

4. 事务隔离级别有哪些?

参考答案

    读未提交 (READ UNCOMMITTED):所有事务都可以看到其它未提交事务的执行结果,该隔离级别一般不会使用。
    读已提交 (READ COMMITTED):一个事务只能看到已经提交的事务所做的变更。
    可重复读 (REPEATABLE READ):确保同一事务的多个实例在并发读取数据时会看到相同的数据行。
    串行化 (SERIALIZABLE):完全串行化读,每次读都需要获得表级共享锁,读写相互阻塞。

5. 事务特性有哪些?

参考答案

    原子性:事务是一个完整的操作。事务的各元素是不可分的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,则整个事务将失败。
    一致性:事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。
    隔离性:对数据进行修改的所有并发事务是彼此隔离的, 这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
    持久性:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。

6. 什么是 WAL 机制?

参考答案

    在 MySQL 中,为了提高数据库的性能,MySQL 采用了 WAL(Write-Ahead Logging)机制,即客户端在修改数据的过程后,并不会立马对硬盘中的数据进行更新。

7. MySQL 常见日志有哪些?

参考答案

    错误日志(errorlog)
    一般查询日志(general log)
    二进制日志(binlog)
    中继日志(relay log)
    重做日志(redo log)
    回滚日志(undo log)

8. 什么是索引?

参考答案

    数据库只做两件事情:存储数据、检索数据。而索引是在你存储的数据之外,额外保存一些路标(一般是 B+树),以减少检索数据的时间。所以索引是主数据衍生的附加结构。
    索引是对数据表的一列活多列的值进行排序的一种结构,使用索引考研快速访问数据表中的特定信息。

9. 索引分类有哪些?

参考答案

    普通索引:最基本的索引,它没有任何的限制。
    唯一索引:索引列的值必须唯一,允许有空值。
    主键索引:它是一种特殊的唯一索引,不允许有空值。
    复合索引:又叫做多列索引,联合索引。多个字段上建立的索引,提高复合条件查询的速度
    全文索引:对文本的内容进行分词,进行搜索。

9. 索引底层结构是什么?

参考答案

    索引的数据结构主要有 B+树和哈希表,对应的索引分别为 B+树索引和哈希索引。InnoDB 引擎的索引类型有 B+树索引和哈希索引,默认的索引类型为 B+树索引。
    B+树的优势:
    -单一节点存储更多元素,减少 IO
    - 所有查询都要找到叶子节点,查询稳定
    - 所有叶子节点形成有序链表,方便范围查询
    - 一般性情况,数据库的 B+树的高度一般在 2~4 层,这就是说找到某一键值的行记录最多需要 2 到 4 次逻辑 IO,相当于 0.02 到 0.04s。

10. 按粒度划分锁有那些?

参考答案

    行锁:粒度最小的锁,表示只针对当前操作的行进行加锁;
    表锁:粒度最大的锁,表示当前的操作对整张表加锁;
    页锁:粒度介于行级锁和表级锁中间的一种锁,表示对页进行加锁。

11. MySQL 中什么是存储引擎

参考答案

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

12. MySQL 常用存储引擎有哪些?

参考答案

    InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。
    MyISAM 存储引擎,并发性比较差,不支持事物和外键等操作,默认的锁粒度为表级锁。
    MySQL5.5 之前的默认存储引擎是 MyISAM,5.5 之后就改为了 InnoDB。

13. 什么是主从同步?

参考答案

    使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。
    一句话表示就是,主数据库做什么,从数据库就跟着做什么。

14. 主从同步原理

参考答案

    整体上来说,复制有 3 个步骤:
    1. master 将改变记录到二进制日志 (binary log) 中。
    2. slave 的 io 线程将 master 的 binary log events 拷贝到它的中继日志 (relay log)。
    3. slave 的 sql 线程解析中继日志中的事件并在从库执行,保持与主库一致。

15. 什么是读写分离

参考答案

    读写分离就是只在主数据库服务器上写,只在从数据库服务器上读。基本的原理是让主数据库服务器处理事务性查询,而从数据库服务器处理 select 查询。数据库复制被用来把主数据库服务器上数据变更同步到集群中的从数据库服务器。

你可能感兴趣的:(Java面试真题精讲,sql,数据库,java)