📅  最后修改于: 2023-12-03 15:30:23.850000             🧑  作者: Mango
DBMS面试题 - SQL
简介
DBMS(Database Management System)是指数据库管理系统,是指可以通过计算机对数据库进行管理、存取、维护的软件系统。SQL(Structured Query Language)是结构化查询语言,是一种用于管理关系型数据库的编程语言。在DBMS中,使用SQL语言进行数据库操作。因此,SQL语言是数据库管理的基础。
在面试中,SQL是一个必不可少的部分。无论是应聘DBA、数据分析师、数据工程师、后端工程师还是其他任何与数据库有关的职位,都需要掌握SQL语言。接下来,我们将介绍一些SQL面试题。
SQL面试题
1. 什么是SQL语言?它用来干什么?
SQL是结构化查询语言,是一种用于管理关系型数据库的编程语言。在DBMS中,使用SQL语言进行数据库操作。SQL可用于进行数据的查询、更新、删除、添加等操作,实现对数据库的灵活管理,让用户高效的使用数据,可以快速地得到所需要的数据。
2. 什么是关系型数据库?
关系型数据库是一种基于关系模型的数据管理系统,使用表格来组织、存储和管理数据。关系型数据库可以使用SQL语言进行操作,常见的关系型数据库包括MySQL、Oracle、SQL Server、PostgreSQL等。与之相比,非关系型数据库则没有固定的表格结构。
3. 数据库的范式有哪些?它们各自的作用是什么?
数据库的范式是关系型数据库设计的理论基础,它是指关系数据库中数据的规范化程度。一般而言,范式越高的数据库表,数据冗余度越低,数据一致性、完整性、可靠性越高。数据库中常用的范式有以下几种:
- 第一范式(1NF):保证属性原子性,即每个属性不能再分解;
- 第二范式(2NF):在1NF的基础上,建立在主键上的所有非主键属性都完全依赖于主键,而不是依赖于其他非主键属性;
- 第三范式(3NF):在2NF的基础上,消除表中存在的传递依赖关系。
4. 数据库索引是什么?有哪些类型?
数据库索引是一种特殊的查询表,它可以加快查询数据的速度。索引通常是一个单独的表,它包含着主键与索引的对应关系。
常见的数据库索引类型包括:
- B树索引:一种平衡树,它能够快速的定位某一行数据;
- Hash索引:使用哈希函数计算索引键值,定位速度极快,但只支持等值查找;
- 全文索引:用于查找文本内容,比如文章、日志等。在MySQL中,它可以支持InnoDB和MyISAM两种引擎;
- 空间索引:用于处理地理信息,比如地理位置、地图等。
5. 数据库连接有哪些?它们之间有什么原理区别?
在SQL查询中,连接是一种用于合并两个或多个表格(即数据集)的操作。常见的数据库连接方式有以下几种:
- INNER JOIN(内连接):只返回两个表格中匹配的数据行,即只返回连接列上匹配的行,且不包含任何一张表格中未匹配的行;
- LEFT JOIN(左连接):返回左表格所有数据行以及两表格中匹配的右表格数据行;
- RIGHT JOIN(右连接):返回右表格所有数据行以及两表格中匹配的左表格数据行;
- FULL JOIN(全连接):返回两表格中的所有数据行,如果某一行不存在,则对应的值为NULL。
这些连接方式的原理区别在于返回数据的不同,具体可参见下面的SQL语句:
--内连接
SELECT * FROM table_A INNER JOIN table_B ON table_A.id = table_B.id;
--左连接
SELECT * FROM table_A LEFT JOIN table_B ON table_A.id = table_B.id;
--右连接
SELECT * FROM table_A RIGHT JOIN table_B ON table_A.id = table_B.id;
--全连接
SELECT * FROM table_A FULL JOIN table_B ON table_A.id = table_B.id;
6. 数据库事务的四大属性是什么?它们的含义是什么?
数据库事务是指一个或多个SQL操作原子的、一致的、持久的执行单元。事务是保证数据一致性的重要手段,它允许一个操作序列被视为一个整体,要么全部执行成功,要么全部回滚失败。
数据库事务具有四个基本属性,即ACID:
- Atomicity(原子性):操作序列被看作一个整体执行,要么全部成功,要么全部失败;
- Consistency(一致性):事务执行前后,系统的状态保持一致性;
- Isolation(隔离性):多个事务并发执行时,一个事务执行的中间结果不会被其他事务看到,以保证数据的安全性;
- Durability(持久性):一旦事务提交,其结果就是永久性的,并且即使出现宕机等意外情况,数据也不会丢失。
7. 数据库的三级范式有什么作用?
数据库的三级范式是指在满足第一范式和第二范式的基础上,消除表中存在的传递依赖关系。采用三级范式设计的数据库表,数据冗余度更低,数据一致性更高,容易保证数据的完整性和安全性。
8. 数据库事务中的隔离级别有哪些?它们之间有什么区别?
数据库事务的隔离级别是指在并发执行的多个事务间保持数据一致性所采用的隔离性规则。数据库中常见的隔离级别有以下几种:
- 读取未提交(READ UNCOMMITTED):事务间相互干扰的情况最严重,数据的不一致性也最大。该隔离级别会导致脏读(Dirty Read)的情况出现,即一个事务中读取到了另一个事务尚未提交的数据;
- 读取已提交(READ COMMITTED):在这个级别中避免了脏读,一个事务只能看到已经提交的数据。但是,因为事务在执行过程中,其他事务可能提交新的数据,因此,读取到的数据不是很稳定,可能出现不可重复读(Non-Repeatable Read)和幻读(Phantom Read);
- 可重复读(REPEATABLE READ):保证了事务在执行过程中,不会出现不可重复读的情况,即多次读取同样的数据结果一致。但是,由于其他事务可能插入新数据,因此可能出现幻读;
- 串行化(SERIALIZABLE):并发下事务同时进行。为了避免死锁,导致整个系统不可用,事务在进行时会强制排序,不允许同时进行。这样,就保证了事务间的相互干扰的情况最低,数据一致性也最高。
9. 数据库中的锁机制是什么?它有哪些类型?
数据库中的锁机制是一种用于控制并发访问的技术,它保证每个事务占用的资源互不干扰。简单来说,锁机制就是将资源锁定,禁止其他事务对该资源进行更新或删除。通常,锁有以下几种类型:
- 共享锁(Shared Lock,S锁):多个事务可以同时读取同一资源,但只有一个事务可以更新该资源;
- 排它锁(Exclusive Lock,X锁):锁定数据资源,其他任何事务都不能对其进行更新或删除操作;
- 行锁(Row Lock):锁定数据表中的某一行,其他事务无法对该行进行更新或删除操作,但可以对其他行进行操作;
- 表锁(Table Lock):锁定整张数据表,其他任何事务不能对其进行更新或删除操作;
- 页锁(Page Lock):锁定数据表的一页,其他事务无法对该页的任何行进行更新或删除操作。
10. 怎样优化SQL查询?
SQL的优化,主要是针对查询操作进行的。优化查询可以有效地提高查询效率和系统性能。以下介绍几种SQL优化的方法:
- 筛选合适的查询字段:不需要查询的字段不应该包含在查询语句中;
- 合理选择查询关键字:采用合适的查询关键字,可以显著地提高查询速度;
- 创建索引:使用索引可以大大提高查询效率;
- 避免使用SELECT *:不建议使用“SELECT *”进行查询;
- 优化查询条件:尽量让查询条件使用到索引,需要进行全表扫描时,应该使用优化查询语句的方法。