数据库面试题及答案(实战版).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

数据库面试题及答案(实战版)

一、基础概念题(10题)

问:MySQL中InnoDB和MyISAM引擎的核心区别?实际项目中怎么选?

答:核心区别集中在事务、锁机制和存储结构:

InnoDB支持事务(ACID)、行级锁、外键,适合写操作多的场景(如电商订单、支付系统);

MyISAM不支持事务和外键,只有表级锁,读性能优,适合读多写少(如博客文章、静态数据)。

实际选择:优先InnoDB(大部分业务需要事务保证数据一致性),仅纯静态数据存储可考虑MyISAM。

问:什么是数据库范式?实际设计表时会严格遵循第三范式吗?

答:范式是表结构设计的规范,核心是减少冗余:

1NF:字段原子性(不可拆分,如“联系方式”拆成电话+邮箱);

2NF:消除部分依赖(非主键字段必须完全依赖主键,而非主键的一部分);

3NF:消除传递依赖(非主键字段不依赖其他非主键字段)。

实际不会严格遵循:为了查询效率,会适当冗余(如订单表存“用户名”,避免关联用户表查询),遵循“反范式优化”原则。

问:数据库索引的作用是什么?常见索引类型有哪些?

答:作用是加快查询速度,减少磁盘I/O(类似书籍目录)。常见类型:

主键索引:唯一且非空,InnoDB中主键索引是聚簇索引(数据和索引存在一起);

唯一索引:保证字段值唯一,允许空值;

普通索引:无约束,仅加速查询;

联合索引:多字段组合(如idx_user_id_time(user_id,create_time)),遵循“最左前缀匹配”原则。

问:什么是事务?ACID分别指什么?

答:事务是一组不可拆分的SQL操作(要么全执行,要么全回滚),ACID是特性:

A(原子性):操作不可分割,要么成要么败;

C(一致性):事务执行前后数据总量一致(如转账,A减100,B必加100);

I(隔离性):多个事务并发执行时,相互不干扰;

D(持久性):事务提交后,数据永久保存(即使数据库崩溃也不丢失)。

问:MySQL的事务隔离级别有哪些?默认是哪个?

答:4个级别(从低到高):

读未提交(ReadUncommitted):能读到其他事务未提交的数据(脏读);

读已提交(ReadCommitted):只能读到其他事务已提交的数据(避免脏读,存在不可重复读);

可重复读(RepeatableRead):同一事务内多次查询结果一致(避免脏读、不可重复读,MySQL默认);

串行化(Serializable):事务串行执行(避免所有并发问题,性能最低)。

问:什么是脏读、不可重复读、幻读?

答:并发事务中的数据问题:

脏读:读到其他事务未提交的“临时数据”(如A转账给B,事务未提交,B查询到余额增加,后A回滚,B读到的是脏数据);

不可重复读:同一事务内,多次查同一数据,结果不一致(如A查询余额1000,同时B转账100并提交,A再次查询变成1100);

幻读:同一事务内,多次执行同一查询SQL,返回的记录数不同(如A查询有10条订单,同时B新增1条并提交,A再次查询变成11条)。

问:数据库锁按粒度分有哪些?InnoDB的行锁是怎么实现的?

答:锁粒度从大到小:表锁、页锁、行锁。

表锁:锁定整个表,并发低(MyISAM默认);

行锁:锁定单行数据,并发高(InnoDB默认);

InnoDB行锁基于索引实现:只有通过索引条件查询时,才会触发行锁;如果没有索引,会退化为表锁(比如updateusersetname=awhereid=1(有索引,行锁);updateusersetname=awherename=b(无索引,表锁))。

问:什么是聚簇索引和非聚簇索引?InnoDB和MyISAM的索引结构区别?

答:聚簇索引:索引和数据存储在一起,索引叶子节点存完整数据;

非聚簇索引:索引和数据分离,索引叶子节点存主键值(需要回表查询数据)。

区别:

InnoDB:主键索引是聚簇索引,非主键索引是二级索引(叶子节点存主键);

MyISAM:所有索引都是非聚簇索引(索引和数据分开存储,叶子节点存数据地址)。

问:什么是SQL注入?怎么防范?

答:SQL注入是黑客通过拼接SQL语句,非法获取或修改数据(如登录接口:select*fromuserwhereusername=${name}andpassword=${pwd},黑客输入name=or1=1--,拼接后变成select*fromuserwhereusername=or1=1--andpassword=xxx,直接登录成功)。

防范方法:

使用预处理语句(Prepare

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档