MySQL数据库题及答案_第1页
MySQL数据库题及答案_第2页
MySQL数据库题及答案_第3页
MySQL数据库题及答案_第4页
MySQL数据库题及答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL数据库题及答案一、单项选择题(共10题,每题1分,共10分)以下属于当前主流MySQL版本默认的存储引擎的是A.MyISAM存储引擎B.InnoDB存储引擎C.Memory存储引擎D.CSV存储引擎答案:B解析:当前主流MySQL5.5及以上版本默认的存储引擎为InnoDB,它原生支持事务、行级锁和外键特性。选项A的MyISAM是旧版本的默认存储引擎,不支持事务和行级锁;选项C的Memory是将数据存放在内存中的临时存储引擎,不能作为默认持久化存储的引擎;选项D的CSV是将数据以逗号分隔文本格式存储的引擎,不支持索引等常规数据库特性,仅用于特殊数据导入场景。MySQL中专门用于对分组之后的结果进行过滤的关键字是A.WHEREB.HAVINGC.DISTINCTD.GROUPBY答案:B解析:HAVING子句是专门用于分组完成后对分组聚合结果进行过滤的关键字。选项A的WHERE子句执行在分组操作之前,无法过滤分组后的聚合结果;选项C的DISTINCT关键字用于去除查询结果的重复行,不具备过滤分组的能力;选项D的GROUPBY是分组关键字本身,不承担过滤逻辑。以下四个聚合函数中,MySQL中用于统计查询返回数据总行数的函数是A.SUM()B.AVG()C.COUNT()D.MAX()答案:C解析:COUNT()函数的作用是统计符合条件的记录总行数。选项A的SUM()用于计算指定字段的数值总和;选项B的AVG()用于计算指定字段的平均值;选项D的MAX()用于获取指定字段的最大值,三个函数均不具备统计总行数的功能。下列关于MySQL主键约束的描述,正确的是A.一张表可以允许定义多个主键约束B.主键字段允许存储NULL值C.主键约束的字段值必须全局唯一D.主键字段的数值允许重复答案:C解析:主键约束的核心特性是非空且全局唯一。选项A错误,一张表最多只能定义一个主键约束;选项B错误,主键字段自动带有非空约束,不能存储NULL值;选项D错误,主键字段的数值不允许出现任何重复。MySQL中用于实现分页查询,指定返回数据起始位置和条数的关键字是A.ORDERBYB.LIMITC.OFFSETD.RETURN答案:B解析:LIMIT关键字可以直接指定分页查询的起始位置和返回条数,是MySQL专属的分页语法。选项A的ORDERBY是排序关键字,和分页逻辑无关;选项C的OFFSET需要和LIMIT配合使用,不能单独完成分页参数的指定;选项D的RETURN不属于MySQL查询语句的合法关键字。在MySQL的LIKE模糊查询语法中,可以匹配任意多个任意字符的通配符是A.%B._C.*D.?答案:A解析:%通配符可以匹配0个到任意多个任意字符。选项B的下划线_仅能匹配1个任意字符;选项C的星号是很多编程语言和搜索引擎的通配符,不属于MySQLLIKE语法的合法通配符;选项D的问号是部分正则语法的通配符,不具备对应模糊匹配作用。以下SQL语句中,属于MySQL数据定义语言DDL的是A.UPDATE修改数据语句B.SELECT查询数据语句C.ALTERTABLE修改表结构语句D.COMMIT提交事务语句答案:C解析:ALTERTABLE用于修改表的元数据结构,属于数据定义语言范畴。选项A的UPDATE和选项B的SELECT都属于数据操纵语言DML;选项D的COMMIT属于事务控制语句,不属于DDL。MySQL中用于给用户授予指定数据库操作权限的关键字是A.REVOKEB.GRANTC.CREATEUSERD.DROPUSER答案:B解析:GRANT语句是MySQL中专门用于给已有用户分配各类操作权限的关键字。选项A的REVOKE用于回收用户已有的权限,和授权逻辑相反;选项C的CREATEUSER仅用于创建新用户,不会分配任何权限;选项D的DROPUSER用于删除指定用户,和授权无关。下列关于varchar和char类型的描述,正确的是A.char类型是可变长度字符串类型B.varchar类型是固定长度字符串类型C.char类型存储长度不足时会自动用空格补全到定义的长度D.varchar类型的性能比char类型更高答案:C解析:char是定长字符串类型,存储长度不足时会自动补空格到定义的固定长度,读取时再自动去掉末尾空格。选项A和B的描述刚好颠倒,varchar是可变长度字符串,char是定长字符串;选项D错误,定长的char类型读写性能比varchar更高,仅在字段长度波动大的场景下varchar更节省存储空间。使用EXPLAIN关键字分析MySQL查询执行计划时,以下哪个type字段值代表查询触发了全表扫描A.ALLB.refC.rangeD.const答案:A解析:type字段值为ALL代表MySQL需要扫描全表的所有数据行才能完成查询,是性能最差的访问类型。选项B的ref代表使用普通非唯一索引完成等值查询;选项C的range代表使用索引进行范围查询;选项D的const代表通过主键或者唯一索引一次就能命中数据,是性能最优的访问类型。二、多项选择题(共10题,每题2分,共20分)以下属于MySQL事务ACID核心特性的选项有A.原子性B.一致性C.隔离性D.持续性答案:ABCD解析:事务ACID四大特性分别是原子性、一致性、隔离性、持久性(也可称持续性),四个选项描述的特性全部正确,是事务机制的核心设计目标。以下属于MySQL中合法的索引类型的有A.普通索引B.唯一索引C.全文索引D.聚集索引答案:ABCD解析:四个选项描述的索引类型都是MySQL中支持的合法索引类型,其中普通索引用于常规加速查询,唯一索引用于保证字段值唯一,全文索引用于长文本关键词模糊检索,聚集索引是InnoDB主键索引的存储结构实现。下列操作中,可以有效提升MySQL查询性能的合理操作有A.为经常出现在WHERE条件后的字段建立合适索引B.避免在大表中使用SELECT*查询所有字段C.合理使用分页查询,控制单次返回的数据条数D.尽可能使用子查询代替多表关联查询答案:ABC解析:前三个选项都是非常经典的MySQL查询优化手段,能够在绝大多数场景下有效提升查询效率。选项D的描述错误,MySQL对多表关联查询的优化成熟度远高于子查询,绝大多数场景下用JOIN关联代替子查询的性能表现更好。以下属于MySQL中常见的约束类型的有A.非空约束B.唯一约束C.外键约束D.自定义规则约束答案:ABC解析:MySQL原生支持的常规约束包括主键约束、非空约束、唯一约束、外键约束、默认值约束,因此前三个选项全部正确。选项D的自定义规则约束不属于MySQL内置支持的通用约束类型,需要通过触发器或者应用层代码额外实现。MySQL中常见的日志类型包括以下哪几种A.错误日志B.二进制日志C.慢查询日志D.访问日志答案:ABC解析:MySQL内置的常规日志包含错误日志、二进制日志、慢查询日志、通用查询日志四类,前三个选项全部符合。选项D的访问日志是Web服务器的常规日志类型,不属于MySQL原生的日志分类。下列关于InnoDB行级锁的描述,正确的有A.InnoDB的行级锁是加在索引对应的索引记录上的B.如果查询条件没有命中任何索引,InnoDB的行级锁会自动升级为表级锁C.InnoDB共享锁之间是互相兼容的D.InnoDB排他锁和共享锁之间是完全兼容的答案:ABC解析:前三个选项的描述完全符合InnoDB锁机制的特性。选项D描述错误,排他锁和所有其他类型的锁都是互斥的,获取排他锁之前必须等待其他所有共享锁全部释放。以下可以终止MySQL中正在运行的活跃连接的合法操作有A.执行KILL进程ID指令终止指定连接B.重启MySQL数据库服务C.执行ROLLBACK指令可以直接终止所有运行中的连接D.修改连接用户的密码自动踢掉所有连接答案:AB解析:执行KILL指令终止指定进程和重启数据库服务都是可以终止活跃连接的合法操作。选项C的ROLLBACK指令的作用是回滚当前会话中未提交的事务,无法终止其他会话的活跃连接;选项D修改用户密码不会主动踢掉已经建立的活跃连接。下列SQL语句中,属于MySQL中用于修改数据的合法语句有A.INSERTINTO插入数据语句B.UPDATESET更新数据语句C.DELETEFROM删除数据语句D.ALTERTABLE修改字段名语句答案:ABC解析:前三个选项都是用于修改表中存储的业务数据的合法DML语句。选项D的ALTERTABLE语句是DDL语句,作用是修改表的元数据结构,不属于修改业务数据的语句范畴。下列选项中会导致MySQL锁竞争加剧,出现死锁风险的操作有A.多个事务以完全相反的顺序更新同一批数据行B.事务中执行耗时很长的查询,长时间不提交事务C.大批次批量更新大量数据行D.所有事务都按照统一的固定顺序更新数据答案:ABC解析:前三个操作都会显著提升锁的持有时间和冲突概率,大幅增加死锁出现的可能性。选项D所有事务按照统一顺序更新数据是业界通用的规避死锁的有效手段,不会加剧锁竞争。MySQL中可以用于实现数据备份的合法方案有A.使用mysqldump工具执行逻辑备份B.直接拷贝InnoDB的数据物理文件C.基于二进制日志完成增量备份D.直接复制数据库进程内存快照作为备份答案:ABC解析:前三个都是工业界通用的MySQL成熟备份方案,分别对应逻辑全量备份、物理备份和增量备份。选项D复制进程内存快照无法得到完整持久化的磁盘数据,不能作为合法的数据库备份方案。三、判断题(共10题,每题1分,共10分)在同一条SELECT查询语句中,可以同时使用WHERE子句和HAVING子句完成过滤逻辑。答案:正确解析:MySQL的SELECT语句可以同时使用两个子句,WHERE子句先过滤不符合条件的原始行,之后分组,HAVING子句再过滤分组之后的聚合结果,二者搭配可以实现更复杂的过滤逻辑,表述完全正确。MySQL中varchar类型字段的最大长度永远只能是255个字符。答案:错误解析:在主流新版本MySQL中,varchar类型的最大支持长度已经扩展到了65535字节,只有部分非常老旧的版本和特殊字符集场景下最大长度会被限制为255字符,表述不符合实际特性。InnoDB存储引擎中,同一个表的多个普通非唯一索引的叶子节点中存储的都是对应行的主键值。答案:正确解析:InnoDB的所有二级索引叶子节点都存储主键值,查询数据时需要通过主键值回到聚集索引中回表获取完整行数据,这是InnoDB索引结构的核心特性,表述正确。执行DELETEFROM表名的操作会立刻彻底释放表占用的全部磁盘存储空间。答案:错误解析:DELETE操作只是给数据行打上删除标记,并不会立刻回收释放磁盘空间,已删除的空间会留作后续新写入的数据复用,不会直接返还给操作系统磁盘。MySQL默认的事务隔离级别是可重复读级别。答案:正确解析:InnoDB引擎默认的事务隔离级别为可重复读,该隔离级别在避免脏读、不可重复读的同时,在大部分业务场景下也解决了幻读问题,是平衡了性能和数据可靠性的选择,表述正确。使用TRUNCATE语句清空整个表的数据,可以触发对应表上绑定的DELETE触发器。答案:错误解析:TRUNCATE属于DDL语句,直接清空表的所有数据,不会逐行执行删除逻辑,也不会触发任何绑定的DELETE触发器,该表述不符合实际特性。MySQL中允许定义一个字段的默认值为CURRENT_TIMESTAMP,实现插入数据时自动填充当前系统时间。答案:正确解析:DATETIME和TIMESTAMP类型的字段都支持将默认值设置为CURRENT_TIMESTAMP,插入数据时不需要手动指定时间值,数据库会自动填充当前的系统时间戳,是非常常用的设计方式,表述正确。索引建立的越多,查询效率就一定会越高,不会有任何副作用。答案:错误解析:索引虽然可以提升查询效率,但会额外占用磁盘存储空间,同时也会降低INSERT、UPDATE、DELETE等写入操作的性能,索引数量过多反而会严重降低数据库的整体写入性能,并非越多越好。关联两个表执行JOIN查询时,小表作为驱动表的执行效率通常会高于大表作为驱动表的情况。答案:正确解析:嵌套循环连接等MySQL常用的关联算法中,驱动表的每一条记录都要到被驱动表匹配一次,小表作为驱动表可以大幅降低匹配的总次数,显著提升关联查询的效率,该描述符合数据库关联优化的通用原理。NULL值和数据库中任何其他数值进行比较运算的结果都为UNKNOWN,无法得到布尔真值。答案:正确解析:MySQL中NULL代表未知值,任何和NULL进行的等于、比较运算的结果都不是真,也不是假,而是特殊的UNKNOWN,判断字段是否为NULL只能使用ISNULL关键字,该表述完全正确。四、简答题(共5题,每题6分,共30分)简述索引的核心优缺点。答案:第一,核心优势为大幅降低数据库的IO操作次数,显著提升数据查询的执行效率,同时可以通过唯一索引等实现数据唯一性约束,在排序分组场景下也能大幅减少排序的CPU开销;第二,核心缺点为索引会占用额外的磁盘存储空间,增加存储成本;第三,索引会降低数据增删改操作的执行效率,写入数据时需要同步维护所有相关索引的结构,写入耗时会明显上升;第四,不合理的索引设计反而会导致索引失效,甚至出现比全表扫描更差的执行性能。解析:该题要点覆盖了索引在查询、约束、排序维度的收益,也覆盖了存储开销、写入性能损耗、不合理索引反效果三个核心负面特性,掌握这些要点才能在实际开发中合理评估索引的收益成本比,避免盲目建立不必要的索引。简述事务四大ACID特性的具体含义。答案:第一,原子性指事务是一个不可分割的最小执行单元,事务中的所有操作要么全部执行成功,要么全部执行失败回滚,不会出现部分操作成功部分失败的中间状态;第二,一致性指事务执行前后,数据库从一个合法的一致性状态切换到另一个合法的一致性状态,所有预设的约束规则都不会被破坏;第三,隔离性指多个并发执行的事务之间互相隔离,不会互相干扰,不同的隔离级别定义了不同的隔离程度;第四,持久性指事务一旦提交成功,其对数据的修改就会永久生效,即使数据库发生异常宕机也不会丢失已经提交的修改数据。解析:四大特性是事务机制的核心设计目标,每个特性都对应了InnoDB中不同的底层实现机制,原子性通过undo日志实现,持久性通过redo日志实现,隔离性通过锁和MVCC机制实现,一致性是前三个特性共同作用最终保障的结果。简述什么是MySQL的慢查询日志,它的核心作用是什么。答案:第一,慢查询日志是MySQL提供的一种日志记录工具,会自动记录所有执行耗时超过指定阈值的SQL语句;第二,慢查询日志的阈值可以由用户自行定义,通常设置为1秒到2秒不等,所有执行时长超过这个阈值的语句都会被写入日志文件中;第三,慢查询日志的核心作用是帮助开发运维人员定位数据库中执行效率低下的慢SQL语句,是排查数据库性能问题最核心的入口工具;第四,通过分析慢查询日志可以快速找到需要优化的慢查询,针对性地建立索引或者改写SQL语句,大幅提升数据库的整体性能表现。解析:慢查询日志是生产环境MySQL性能优化的必备基础功能,绝大多数慢查询性能问题都可以通过慢查询日志快速定位,开启慢查询日志带来的性能损耗非常低,几乎不会影响线上业务的正常运行,是生产数据库的标准配置项。简述MySQL中SQL注入的核心原理和基础防范手段。答案:第一,SQL注入的核心原理是攻击者通过在前端输入框传入恶意的SQL片段,拼接开发人员编写的原生SQL语句,改变原有SQL的执行逻辑,非法获取或者篡改数据库中的敏感数据;第二,最核心的防范手段是使用预编译的参数化查询,所有动态传入的参数全部作为参数传入,而不是直接拼接进SQL字符串中,从根源上避免恶意SQL片段的注入;第三,需要严格限制数据库账号的权限,业务账号不允许拥有drop、alter等高危权限,即使出现注入问题也能最大程度降低损失;第四,在应用层对用户输入的特殊字符做必要的过滤校验,拦截明显的注入特征字符。解析:SQL注入是Web应用最常见的数据库层安全漏洞,99%以上的注入漏洞都是因为开发人员直接拼接SQL字符串导致的,使用成熟ORM框架提供的参数化查询能力就能避免绝大多数SQL注入风险。简述MySQL中执行计划EXPLAIN关键字的核心用途。答案:第一,EXPLAIN关键字可以模拟MySQL优化器执行SQL查询语句,返回这条SQL的执行计划详情,开发人员可以不用实际执行SQL就能了解SQL的执行方式;第二,通过EXPLAIN返回的结果可以清晰看到查询使用的访问类型、用到的索引信息、关联的表顺序、扫描的预估行数等核心信息;第三,通过分析EXPLAIN的结果可以快速判断SQL是否命中了预期的索引,是否出现了全表扫描等性能问题;第四,EXPLAIN是MySQL调优过程中最基础也是最重要的分析工具,绝大多数SQL优化工作都需要借助EXPLAIN的结果指导优化方向。解析:EXPLAIN是MySQL开发优化人员的必备技能,熟练掌握EXPLAIN返回各个字段的含义,就能快速定位SQL的性能瓶颈点,避免写出低效的慢查询语句。五、论述题(共3题,每题10分,共30分)结合实际开发场景论述MySQL索引失效的常见场景以及对应的规避方案。答案:论点:索引是MySQL性能优化最核心的手段,但很多不合理的SQL写法会导致已经建立的索引完全失效,数据库被迫执行全表扫描,严重拖垮业务性能,必须掌握常见的失效场景提前规避。首先第一类场景是对索引字段进行函数运算或者隐式类型转换,举实际案例,比如用户表的手机号phone字段是varchar类型,并且已经建立了普通索引,开发人员写SQL时错误写为WHEREphone=13xxxxxxx,没有给手机号加单引号,MySQL会隐式将phone字段的内容全部转换为数字再进行比较,导致phone上的索引完全失效,触发全表扫描,对应的规避方案是写SQL时严格保持查询条件的类型和字段定义的类型完全一致,绝对不要在索引字段上使用substring、date等函数运算。第二类场景是使用左模糊通配符的LIKE查询,比如WHEREnameLIKE‘%张%’,查询条件最左侧就是通配符%,MySQL无法通过B+树索引的有序性定位数据,直接导致索引失效,对应的规避方案是如果需要对长文本做全模糊检索,可以使用全文索引或者对接专门的搜索引擎服务,不要依赖普通索引实现模糊搜索。第三类场景是不符合联合索引的最左匹配原则,比如我们建立的联合索引是(area_id,create_time,user_id),但是查询条件只传入了create_time和user_id,没有传入最左侧的area_id字段,会导致整个联合索引完全失效,对应的规避方案是设计联合索引时把经常作为等值查询条件的字段放在索引的最左侧,写查询语句时尽量带上联合索引最左侧的字段。最后做总结,开发完成上线之前,可以用EXPLAIN关键字校验所有新增查询的执行计划,提前排查出索引失效的问题,避免上线之后出现严重的性能故障。结合并发场景实例论述MySQL四大事务隔离级别的具体表现和适用场景。答案:论点:MySQL的四个事务隔离级别分别对应不同的并发冲突处理策略,不同的级别在性能和数据一致性之间做了不同的权衡,需要结合业务场景选型。第一是读未提交隔离级别,在这个级别下一个事务可以直接读取到其他未提交事务修改的脏数据,举实例,事务A修改了用户的余额为1000,还没有提交,事务B就直接读到了这个修改后的余额,之后事务A执行回滚操作,事务B读到的1000就是完全不存在的脏数据,这个隔离级别并发性能最高,但是会出现脏读问题,几乎没有实际业务会使用。第二是读提交隔离级别,也是很多其他数据库的默认隔离级别,这个级别可以避免脏读,但是会出现不可重复读的问题,举实例,事务A两次查询同一个用户的余额,两次查询之间事务B修改了余额并提交,事务A两次查询得到的余额是不一样的,每次查询都读到其他事务已经提交的最新数据,这个隔离级别性能较好,适合绝大多数对数据一致性要求不高的常规业务场景,比如普通的内容类、资讯类业务。第三是可重复读隔离级别,也就是MySQLInnoDB的默认隔离级别,在这个级别下同一个事务中多次查询同一份数据,在整个事务生命周期里得到的结果是一致的,可以避免脏读和不可重复读问题,举实例,事务A开启事务后第一次读取用户余额为500,即使后续其他事务修改了余额并提交,事务A后续多次查询得到的余额始终是500

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论