考研复试数据库原理⾯试题(⼆)SQL、索引、存储过程、触
发器
写作⽬的:为了应对考研复试中的⾯试,我整理了导师可能提问的地⽅,⼒求⽤⼝语化的语⾔描述出来。
这只是⼀部分,陆续还有数据库原理的其它章节,还会推出数据结构、计算机⽹络复试题整理。
数据库原理我的参考书是《数据库原理及应⽤第⼆版(雷景⽣)》,因为⼀些机缘巧合选择了这本书。不过没关系,⽹上有很多关于数据库原理的⾯试题,⽽且答案也很容易搜到。思维导图在我的processon。如果对你有帮助就打赏⼀下吧。
还有其它系列的⾯试题整理
⽬录
sql语⾔的特点和功能
sql全程是结构化查询语⾔。它的功能是数据查询DQL、数据操纵DML、数据定义DDL、数据控制DCL。
特点是:①语⾔集的风格综合统⼀;②⾼度⾮过程化,只需要指出“做什么”,不⽤说“怎么做”;③⾯向集合操作⽅式;④同⼀种语⾔提供两种使⽤⽅式(⾃含式语⾔、嵌⼊式语⾔),灵活⽅便;⑤简单易学。
sql语⾔的动词:
DQL:SELECT
DDL:CREATE DROP ALTER
DML:INSERT UNDATE DELETE
DCL:GRANT REVOKE
三种模式与SQL的关系?
sql⽀持关系数据库三级模式结构。
外模式对应视图和部分基本表;模式对应基本表;内模式对应于存储⽂件。
SQL各部分的的执⾏顺序?
先根据where⼦句给出的条件从from⼦句指定的基本表或视图中出满⾜条件的元组;然后,再按照select⼦句中的⽬标列选出元组中的属性值形成结果。如果有group by的话,则按照条件进⾏分组,如果有having的话,则只是给定的组才能输出。如果有order by则按照条件进⾏升序或降序。
什么是存储过程?
⼀组为了完成特定功能的sql语句集,经编译后存储在数据库中,⽤户通过指定存储过程的名字并给出参数(如果需要参数)来执⾏它。
什么是触发器?
是⼀个特殊的存储过程,它的执⾏不是由程序调⽤,也不是⼿⼯启动,⽽是由事件触发,⽐如对⼀个表进⾏增删改(insert、delete、update)操作会激活执⾏它。
存储过程和函数区别?
①返回值区别:函数有1个返回值,⽽存储过程是本质上没有返回值,但可以通过设置输出参数⽅式输出(输⼊:in ,输出:out ,输⼊
输出:in out );
②调⽤区别:函数可以嵌⼊在sql中使⽤的,可以在select中调⽤,⽽存储过程必须单独调⽤;
什么情况下⽤存储过程什么情况下不⽤?
1、当⼀个业务同时对多个表进⾏处理的时候采⽤存储过程⽐较合适。
2、复杂的数据处理⽤存储过程,如有些报表处理
3、多条件多表联合查询,并做分页处理
存储过程的优缺点
优点:
1. 运⾏速度:存储过程⼀旦执⾏,在内存中就会保留⼀份这个存储过程,这样下次再执⾏同样的存储过程时,可以从内存中直接调
⽤,所以执⾏速度会⽐普通sql快。
2. 减少⽹络传输:存储过程直接就在数据库服务器上跑。
3. 可维护性:因为可以实时更新DB端的存储过程, 有些bug,直接改存储过程⾥的业务逻辑就搞定了。
4. 增强安全性:提⾼代码安全,防⽌ SQL注⼊。这⼀点sql语句也可以做到。
5. 可扩展性:应⽤程序和数据库操作分开,独⽴进⾏,⽽不是相互在⼀起。⽅便以后的扩展和DBA维护优化。
缺点:
1. SQL本⾝是⼀种结构化查询语⾔,但不是⾯向对象的的,本质上还是过程化的语⾔,⾯对复杂的业务逻辑,过程化的处理会很吃
⼒。同时SQL擅长的是数据查询⽽⾮业务逻辑的处理,如果如果把业务逻辑全放在存储过程⾥⾯,违背了这⼀原则。
2. 如果需要对输⼊存储过程的参数进⾏更改,或者要更改由其返回的数据,则仍需要更新程序集中的代码以添加参数、更新调⽤,等
等,这时候估计会⽐较繁琐了。
3. 开发调试复杂,由于编程⼯具的问题,存储过程的开发调试要⽐⼀般程序困难。
4. 没办法应⽤缓存。虽然有全局临时表之类的⽅法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效
率实在堪忧。
5. 不⽀持集,数据库服务器⽆法⽔平扩展,或者数据库的切割(⽔平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储
在哪个数据库中。
什么是最左匹配原则
⼀句话说不清,不敢往上写。
为什么索引底层⽤B+树⽽不⽤B树、红⿊树、hash
红⿊树在增加删除时会进⾏频繁的调整,来保证红⿊树的性质,会影响性能。
hash的速度虽然在随机访问时⾮常快,但是在顺序查时⾮常鸡肋。
B+树的优势:
1、 B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更⼩,如果把所有同⼀
内部节点的关键字存放在同⼀盘块中,那么盘块所能容纳的关键字数量也越多,⼀次性读⼊内存的需要查的关键字也就越多,相对IO读写次数就降低了。
2、B+树的查询效率更加稳定:由于⾮终结点并不是最终指向⽂件内容的结点,⽽只是叶⼦结点中关键字的索引。所以任何关键字的
查必须⾛⼀条从根结点到叶⼦结点的路。所有关键字查询的路径长度相同,导致每⼀个数据的查询效率相当。
3、由于B+树的数据都存储在叶⼦结点中,分⽀结点均为索引,⽅便扫库,只需要扫⼀遍叶⼦结点即可,但是B树因为其分⽀结点同样
存储着数据,我们要到具体的数据,需要进⾏⼀次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树⽤于数据库索引。
4、B+树适合范围查,顺序遍历叶节点即可。⽽B树在范围查时⽐较鸡肋。
索引的优点和缺点
索引的缺点:⾸先,索引需要占⽤⼀定的空间,创建和维护索引需要消耗时间;其次对表进⾏增加删除时索引也要动态维护,降低了维护速度;
索引的优点:
多表查询sql语句面试题1.⼤⼤加快数据的检索速度;
2.创建唯⼀性索引,保证数据库表中每⼀⾏数据的唯⼀性;
3.加速表和表之间的连接;
4.在使⽤分组和排序⼦句进⾏数据检索时,可以显著减少查询中分组和排序的时间。
什么时候应该创建索引,什么时候不应该创建索引
不使⽤索引的时候
第⼀,对于那些在查询中很少使⽤或者参考的列不应该创建索引。
第⼆,对于那些只有很少数据值种类的列也不应该增加索引。
第三,对于那些数据量要么相当⼤,要么取值很少的,不应该创建索引。
第四,当修改性能远远⼤于检索性能时,不应该创建索引。
使⽤索引的时候
1.主键⾃动建⽴唯⼀索引;
2.频繁作为查询条件的字段应该创建索引;
3.查询中与其他表有关联的字段,例如外键关系;
4.查询中排序的字段创建索引将⼤⼤提⾼排序的速度(索引就是排序加快速查);
5.查询中统计或者分组的字段;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。