seo网站模板下载,韩雪个人网站,专业制作网站制作,注册高级工程师在数据库领域#xff0c;无论是日常开发还是面试场景#xff0c;都有一些高频且重要的问题需要我们深入理解和掌握。本文将对这些常见面试题进行详细阐述#xff0c;帮助大家更好地应对面试和实际工作中的挑战。
面试题一#xff1a;三范式详解
什么是三范式
三范式是关…在数据库领域无论是日常开发还是面试场景都有一些高频且重要的问题需要我们深入理解和掌握。本文将对这些常见面试题进行详细阐述帮助大家更好地应对面试和实际工作中的挑战。
面试题一三范式详解
什么是三范式
三范式是关系型数据库中用于规范数据结构的重要准则包含第一范式、第二范式和第三范式。
假设存在一个学生成绩表字段有学号、姓名、课程名称、成绩、课程学分。数据如下
学号姓名课程名称成绩课程学分001张三数学904001张三英语853002李四数学884002李四英语823
第一范式1NF要求每一列都是不可再分割的最小单元。在此例中所有字段学号、姓名、课程名称、成绩、课程学分都已达到最小数据单元不可分割符合第一范式。第二范式2NF在满足第一范式的基础上非主属性必须完全依赖于主属性。若将学号课程名称设为主键其他字段姓名、成绩、课程学分都完全依赖于这个主键满足第二范式。第三范式3NF在满足第二范式的基础上非主键字段不能依赖于其他非主键字段。此例中姓名依赖于学号成绩和课程学分依赖于学号课程名称不存在非主键字段相互依赖满足第三范式。
简单概括第一范式是确保列的原子性第二范式是在原子性基础上保证非主键对主键的完全依赖第三范式是在前两者基础上杜绝非主键之间的相互依赖。
为什么要遵循三范式
遵循三范式主要有两个目的一是减少数据冗余避免数据的重复存储节省存储空间二是方便数据的维护和更新确保数据的一致性避免在数据修改时出现异常情况。
实际开发中是否一定要严格遵循三范式
实际开发中并不一定严格遵循三范式。虽然三范式能保证数据的规范性但在实际工作中性能也是重要考量因素。例如某些场景下严格遵循三范式可能需要多表联查而多表联查在数据量较大时效率较低。为了提升查询性能有时会引入冗余字段将数据存储在更少的表中这是典型的空间换时间策略。
面试题二关系型数据库与非关系数据库的区别及应用场景
关系型数据库
关系型数据库基于关系模型以表格结构组织和存储数据数据按行和列存储可通过主键和外键建立表间关系。
其特点包括
统一的数据结构以表格形式存储每列有特定数据类型提供规范、结构化的数据存储方式。强一致性遵循 ACID 原则原子性、一致性、隔离性、持久性保障数据一致性和事务完整性。数据完整性支持通过主键和外键定义表间关联关系进行数据完整性约束。丰富的查询功能借助 SQL 查询语言可进行复杂的关系查询、连接操作、多表查询、条件查询和聚合查询等。代表数据库有 MySQL、Oracle 等。
非关系型数据库
非关系型数据库NoSQL不同于传统关系型数据库不依赖表格和关系模型采用键值对、文档、图等多种数据模型存储和管理数据放宽了对数据一致性的要求。
其特点如下
灵活的数据模型可根据应用需求选择和定制合适的数据模型如键值对形式。高可扩展天生支持分布式计算和存储便于横向扩展应对大规模数据和高并发访问。高性能和高可用由于放宽一致性要求可进行异步读写和读写分离等优化提升性能和可用性。代表数据库有 Redis、MongoDB、Neo4j 等。
两者区别
数据模型不同关系型数据库基于关系模型以表格存储数据表间通过外键关联非关系型数据库不采用表格和关系模型数据存储形式多样。数据结构不同关系型数据库数据结构严格需预先定义结构和字段类型数据修改遵循规范和约束非关系型数据库数据结构灵活无需预先定义严格模式可随时添加或修改数据结构。查询语言不同关系型数据库常用 SQL 查询支持复杂查询条件、连接操作和聚合函数非关系型数据库查询语言因类型而异部分支持类似 SQL 语法部分使用特定 API 或 DSL。事务支持不同关系型数据库通常支持 ACID 事务特征保证数据一致性和完整性非关系型数据库事务支持程度不同多数只提供部分 ACID 特性或采用不同一致性模型。扩展性与性能不同传统关系型数据库水平扩展存在挑战常通过垂直扩展提升性能非关系型数据库设计更易于水平扩展通过增加服务器分散数据和负载。
应用场景
关系型数据库适用于对数据一致性要求高、查询复杂的场景如金融交易系统、企业级应用、内容管理系统等。非关系型数据库适用于海量数据存储、日志系统、大数据分析、实时处理、Web 应用和移动应用等领域处理半结构化和非结构化数据时优势明显。
面试题三MySQL 常用引擎
存储引擎决定了数据的存储方式、索引建立方式以及数据更新和查询的技术实现。在 MySQL 中常用的存储引擎有以下几种
InnoDBMySQL 5.5 版本的默认存储引擎支持事务处理、行级锁定和物理外键约束。特点是能提供良好的数据一致性、崩溃恢复能力和高并发性能适用于需要事务支持和多用户读写操作的应用场景。MyISAMMySQL 早期的默认存储引擎不支持事务和行级锁定。它的优势是读取速度快数据存储文件较小适用于只读或读多写少、不需要事务的场景。MEMORY将表数据存储在内存中提供极快的访问速度但数据在服务器重启后会丢失。常用于临时表、缓存表或需要快速查询的小型表。
面试题四InnoDB 和 MyISAM 的区别
事务支持不同InnoDB 支持事务能保证数据的一致性和完整性MyISAM 不支持事务。锁粒度不同InnoDB 最小锁粒度为行级锁在并发操作时仅锁定操作的行对其他行的影响小可提高并发性能但锁管理开销较大MyISAM 最小锁粒度是表级锁操作时锁定整个表其他读写操作需等待锁释放并发性能较低但锁管理开销小。外键支持不同InnoDB 支持物理外键可建立表间的关联约束MyISAM 不支持物理外键。索引存储方式不同InnoDB 索引叶子节点存储的是当前行的数据MyISAM 索引的叶子节点存储的是地址需根据地址获取当前行数据。
面试题五阿里巴巴《Java 开发手册》不建议使用物理外键的原因
使用物理外键会带来以下问题
性能问题插入数据前需先到主键表中查询增加了数据库的 I/O 操作和查询时间导致性能下降。数据库更新风暴问题在高并发场景下可能引发数据库更新风暴大量并发的数据库更新操作集中发生使数据库服务器承受巨大压力导致性能瓶颈、延迟增大甚至系统崩溃。
面试题六物理删除和逻辑删除的区别及日常开发选择
物理删除直接从数据库中永久删除数据记录释放相关存储空间被删除数据无法恢复原有的唯一标识也不再存在。逻辑删除在程序中实现删除功能通常通过添加标记字段或状态字段将数据标记为已删除状态数据实际仍存于数据库中可通过修改查询语句筛选出删除或未删除状态的数据。
在日常开发中选择哪种删除方式取决于具体需求和业务场景。对于重要数据在数据库空间和性能允许的情况下多采用逻辑删除这样既能保留历史数据又方便后续数据恢复保证数据完整性对于不重要的数据如具有时效性的日志数据且数据库对性能和空间有要求时会使用物理删除以节省系统空间提高查询性能。
面试题七内连接、外连接和自连接
内连接是最常用的连接类型根据两个或多个表之间的共同列值连接表只有当连接表之间存在匹配值时才返回结果。例如
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列 表2.列;外连接可返回连接表之间所有匹配和不匹配的数据。外连接分为左外连接LEFT OUTER JOIN、右外连接RIGHT OUTER JOIN和全外连接FULL OUTER JOIN。例如
SELECT 列名 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.列 表2.列;内连接返回的是两个表都存在的数据左右外连接是左右表的所有数据和右左表匹配的数据全外连接返回两个表的所有数据包括匹配和不匹配的数据。
这里我借用一下我觉得比较直观的图片它们的区别是内连接返回的是两个表都存在的数据如图 左右外连接是左右表的所有数据和右左表匹配的数据如图 全外查询到的数据如图 自连接是一种特殊的表连接连接的表在物理上为同一张表但逻辑上视为多张表常用于处理表中具有层次结构的数据。假设存在一个员工表
员工 ID姓名经理 ID1张三32李四33王五NULL4赵六1 通过自连接可查询每个员工的经理姓名
SELECT e1.姓名 AS 员工姓名, e2.姓名 AS 经理姓名
FROM 员工表 AS e1
JOIN 员工表 AS e2 ON e1.经理ID e2.员工ID;结果如下
员工姓名经理姓名张三王五李四王五赵六张三
面试题八创建索引时是否锁表
在 MySQL 5.7 之前创建索引会锁表。因为创建索引过程中需保证表数据不被修改以确保索引的正确性和一致性这会导致其他会话除 select 外阻塞。
而在 MySQL 5.7 之后引入了 Online DDL 技术允许创建索引时不阻塞其他会话所有 DMLINSERT、UPDATE、DELETE、SELECT操作可并发执行。该技术使数据库在运行期间能执行表结构或其他数据库对象的更改操作无需中断正在进行的事务和查询。
面试题九聚簇索引和非聚簇索引的区别
聚簇索引数据按照索引列的值顺序存储在同一页上索引和数据存储在一起找到索引就能找到数据。在 MySQL 的 InnoDB 引擎中聚簇索引默认是主键。非聚簇索引将索引和数据行分开存储索引结构的叶子节点指向数据对应的位置叶子节点存储的是主键 ID。使用非聚簇索引查询时先得到主键 ID再通过主键 ID 到聚簇索引上查找真正的行数据这个过程称为回表查询。
两者主要区别如下
聚簇索引叶子节点存储行数据非聚簇索引叶子节点存储聚簇索引通常是主键 ID。聚簇索引查询效率更高非聚簇索引需回表查询性能相对较低。聚簇索引一般为主键索引一个表中只能有一个非聚簇索引一个表中可以有多个。
面试题十聚簇索引与主键索引的关系及生成规则
聚簇索引在大多数有主键的情况下等于主键索引。若表中没有主键索引聚簇索引的生成规则如下
无主键索引则使用非空唯一索引若表中无主键索引InnoDB 会使用第一个满足唯一约束且设置了非空约束的索引作为聚簇索引。无任何满足的索引则生成隐藏聚簇索引若表中既无主键索引也无符合条件的唯一索引InnoDB 会生成一个名为 GEN_CLUST_INDEX 的隐藏聚簇索引该索引为六字节长整型类型。
通过对这些面试题的深入理解我们不仅能在面试中脱颖而出更能在实际数据库开发和管理工作中做出更合理的决策提升系统性能和稳定性。