数据库面试题小笔记
原文:https://www.cnblogs.com/wenxiaofei/p/9853682.html
https://www.cnblogs.com/liuqiyun/p/8603088.html
做笔记
1、主键、外键、超键、候选键
超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为一个超键,多个属性组合在一起也可以作为一个超键。超键包括候选键和主键。
候选键:是最小的超键,即没有冗余元素的超键。
主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的集合。一个数据只能有一个主键,且主键的值不能为空。
外键:在一个表中存在另一个表的主键称为此表的外键。
2、触发器是什么?触发器的作用
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。
1)安全性
2)审计
3)实现复杂的数据完整性规则
4)同步实时地复制表中的数据
5)自动计算数据的值
触发器的分类:
DML触发器:是指触发器在数据库中发生 DML 事件时将启用。DML事件是指在表或视图中对数据进行的 insert、update、delete 操作的语句。
DDL触发器:是指当服务器或数据库中发生 DDL 事件时将启用。DDL事件是指在表或索引中的 create、alter、drop 操作语句。
登陆触发器:是指当用户登录 SQL SERVER 实例建立会话时触发。如果身份验证失败,登录触发器不会触发。
DML触发器又分为:
after触发(操作之后触发)
instead of触发(操作之前触发)
如何创建:CREATE [OR ALTER] TRIGGER [触发器名称] ON {table}
3、什么是储存过程?与存储函数的区别?用什么来调用
存储过程是一个预编译的SQL语句,优点是模块化设计,也就是只需创建一次,以后多次调用。如果某次操作需要执行多次SQL,使用储存过程比单纯的SQL语句执行要快。
怎么创建:
create procedure 存储过程名称(【参数列表】)
begin
需要执行的语句
end
调用:
直接用call+存储过程名称即可,大大提升查询效率
1)可以用一个命令对象来调用
2)可以供外部程序调用,比如Java程序。
存储过程的3种参数类型
in 不返回 向存储过程传入参数,存储过程中修改该参数的值,不能被返回
out 返回 把存储过程计算的结果放到该参数中,调用者可以得到返回值
inout 返回 in与out 结合,既用于存储过程的传入参数,同时又可以把计算结果放到参数中,调用者可以得到返回值
存储函数
create function 函数名称 ([参数列表])
存储函数的使用方法与mysql 内部函数的使用方法是一样的。存储函数是用户自己定义,而内部函数是MySQL开发者定义。
调用:
select + 函数名
4、什么叫视图?游标是什么?
视图:
一种虚拟的表,具有和物理表相同的功能。可以对视图进行增、改、查操作,视图通常是一个表或者多个表的行或列的子集。对视图的修改不会影响基本表。它使我们获得数据更加容易,相比多表查询。
创建:create view + 视图名
游标:
游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。
使用游标
1、在使用前先定义它。这个过程实际上没有检索数据,它只是定义要使用的select语句
2、一旦定义游标,必须打开游标以供使用。这个过程用前面定义的select语句把数据检索出来。
3、对于有数据的游标,根据需要取出各行的数据进行一定的操作。
4、使用完游标一定要关闭
创建游标
1、定义游标:declare 游标名 cursor for select 语句
2、打开游标:open 游标名
3、获取结果:fetch 游标名 into [变量名]
4、关闭游标:close 游标名
索引
索引的作用:加快查询、更新数据库表中数据
缺点:增加数据库的存储空间
B+Tree索引和Hash索引的区别:
hash索引检索效率高,一次定位
B+Tree需要从根节点到枝节点,最后才能访问到页节点这样的多次IO访问。

浙公网安备 33010602011771号