竹笋

首页 » 问答 » 灌水 » 2020九月C程序员全新面试题题库数
TUhjnbcbe - 2022/11/21 20:21:00
治疗白癜风专科医院 http://pf.39.net/bdfyy/bjzkbdfyy/

此前我们整理了一系列笔试面试题,受到大家的广泛认可和支持,听说有小伙伴通过刷题(当然他本来也很厉害)成功拿到了心仪已久的Offer!为了帮助更多有需求的小伙伴,在此“金九银十”之际,我们花费了更多心血,整理了《全新面试题题库》9月新鲜出炉,今天给大家分享分享!(数据库部分)

内容概述

数据库面试笔试全套内容,包含从基础知识到高级数据库编程;数据库DBA级的调优策略;案例分析,等不同阶段的考察试题。

本题库共包含7大部分,前后整理校对成册,共36页

1基础部分:数据库应用的基础知识,描述数据的表,视图,存储过程,关系,数据库操作等

2索引:多种索引的应用和特点,索引使用案例

3事务:从基础概念到事务四大特征,事务并发特征,隔离级别…….多方面深度剖析

4存储引擎:就MySql数据库的多种数据库引擎特点详解

5优化:包含对数据库Sql语句的优化,优化分析,MySQL慢查询优化;

6数据库锁:介绍MySql数据锁的种类,死锁,死锁的原因,死锁的解决方案,配置锁的超时,乐观锁,悲观锁,不同锁的具体应用

7其他:除了上述问题针对数据库主从复制.和数据库主从复制的缺陷本题库亦做了详细解读

以上就是本题库的全部内容,整理不易,希望能对大家有所帮助!下面开始第一部分!

一、基本概念

1.主键、外键、超键、候选键

超键:

在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键:

是最小超键,即没有冗余元素的超键。

主键:

数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:

在一个表中存在的另一个表的主键称此表的外键。

2.为什么用自增列作为主键

如果我们定义了主键(PRIMARYKEY),那么InnoDB会选择主键作为聚集索引、

如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、

如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)

如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页

如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新记录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZETABLE来重建表并优化填充页面。

3.触发器的作用?

触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

4.什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

调用:

1)可以用一个命令对象来调用存储过程。

2)可以供外部程序调用,比如:java程序。

5.存储过程的优缺点?

优点:

1)存储过程是预编译过的,执行效率高。

2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。

3)安全性高,执行存储过程需要有一定权限的用户。

4)存储过程可以重复使用,可减少数据库开发人员的工作量。

缺点:

移植性差

6.存储过程与函数的区别

1、存储过程bai:存储过程是duSQL语句和可选控制流语句的预编译集合,以一dao个名称存储并作为一个单元处理。

2、函数:是由一个或多个SQL语句组成的子程序,可用于封装代码以便重新使用。函数限制比较多,如不能用临时表,只能用表变量等

7.什么叫视图?游标是什么?

视图:

是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:

是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

8.视图的优缺点

优点:

1对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

2)用户通过简单的查询可以从复杂查询中得到结果。

3)维护数据的独立性,试图可从多个表检索数据。

4)对于相同的数据可产生不同的视图。

缺点:

性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

9.drop、truncate、delete区别

最基本:

drop直接删掉表。truncate删除表中数据,再插入时自增长id又从1开始。delete删除表中数据,可以加where字句。(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATETABLE则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

(2)表和索引所占空间。当表被TRUNCATE后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。

(3)一般而言,droptruncatedelete

(4)应用范围。TRUNCATE只能对TABLE;DELETE可以是table和view

(5)TRUNCATE和DELETE只删除数据,而DROP则删除整个表(结构和数据)。

(6)truncate与不带where的delete:只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

(7)delete语句为DML(datamaintainLanguage),这个操作会被放到rollbacksegment中,事务提交后才生效。如果有相应的tigger,执行的时候将被触发。

(8)truncate、drop是DLL(datadefinelanguage),操作立即生效,原数据不放到rollbacksegment中,不能回滚。

(9)在没有备份情况下,谨慎使用drop与truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果与事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。

(10)Truncatetable表名速度快,而且效率高,因为:?truncatetable在功能上与不带WHERE子句的DELETE语句相同:二者均删除表中的全部行。但TRUNCATETABLE比DELETE速度快,且使用的系统和事务日志资源少。DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATETABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

(11)TRUNCATETABLE删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用DELETE。如果要删除表定义及其数据,请使用DROPTABLE语句。

(12)对于由FOREIGNKEY约束引用的表,不能使用TRUNCATETABLE,而应使用不带WHERE子句的DELETE语句。由于TRUNCATETABLE不记录在日志中,所以它不能激活触发器。

10.什么是临时表,临时表什么时候删除?

临时表可以手动删除:

ROPTEMPORARYTABLEIFEXISTStemp_tb;

临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。

创建临时表的语法与创建表语法类似,不同之处是增加关键字TEMPORARY,

如:

CREATETEMPORARYTABLEtmp_table(

NAMEVARCHAR(10)NOTNULL,

timedateNOTNULL

);

select*fromtmp_table;

*******************************************分割线***********************************

获取完整版

由于题库篇幅过长,完整题库文档我们提供了下载地址,请查看评论区哦!本题库会持续更新,欢迎大家及时

1
查看完整版本: 2020九月C程序员全新面试题题库数