1.触发器的作用:
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的
可以强化约束,来维护数据的完整性和一致性,可以跟踪数据内的操作从而不允许未经许可的更新和变化,
可以级联运算。
如:某表上的触发器上包含对另一个表的数据操作,而该操作会导致该表触发器被触发
2.什么是存储过程,用什么来调用
存储过程是一个预编译的sql语句,优点是允许模块化的设计,就是说只需创建一次,
以后在该程序中就可以调用多次,
如果某次操作需要执行多次sql,使用存储过程比单纯sql语句执行要快
调用:
可以用一个命令对象来调用存储过程
可以供外部程序调用,如java程序
3.存储过程的优缺点
优点:
-存储过程是预编译过的,执行效率高
-存储过程的代码直接存放在数据库中,通过存储过程名直接调用,减少网络通讯
-安全性高,执行存储过程需要有一定权限的用户
-存储过程可以重复使用,可减少数据库开发人员的工作量
缺点:
可移植性差
4.什么是视图,与游标的区别是什么
视图:是一种虚拟的表,具有和物理表相同的功能
游标:
是对查询出来的结果集作为一个单元来进行有效的处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,
可以对结果集当前行进行修改。
游标一般不使用,一般用于需要逐条处理数据的时候
视图的优点:
-视图可以有选择的选取数据库里的一部分
-用户通过简单的查询可以从复杂查询中得到结果
-维护数据的独立性,视图可以从多个表检索数据
-对于相同的数据可以产生不认同的视图
缺点:
查询视图时,必须把视图的查询结果转化为对基本表的查询,
如果这个视图是由一个复杂的多表查询所定义,那么就无法改变数据
5.drop ,truncate ,delete 区别
-delete语句执行删除的过程时每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存
以便进行回滚操作。 truncate 则一次型从表中删除所有数据,无法恢复,并且在删除过程中不会激活删除触发器
执行速度快
-表和索引所占空间 当表被truncate后,这个表和索引所占的空间会恢复到初始大小,而delete操作不会减少表或索引所占的空间,drop则释放表所占空间
-truncate 与delete只删除数据,drop将删除表的结构,约束,触发器,索引,保留该表的存储过程/函数,变为invalid状态
-delete为DML,truncate与drop为DLL
-truncate通过释放存储表数据所用的数据页来删除数据,在事务日志中记录页的释放
delete语句每一次删除一行,在事务日记中记录删除一行
6.数据库范式,以及根据某个场景设计数据表
第一范式:确保每列保持原子性
是最基本的范式,数据库表中的所有字段都应满足第一范式
第二范式:确保表中每列都和主键相关
一张表只能保存一种数据,比如将订单编号和商品编号作为数据库表的联合主键
第三范式:确保每列都和主键列直接相关,而不是间接相关
7.什么是内连接,外连接,交叉连接,笛卡尔积?
内连接:两个表的交集
左连接:左边表的所有行,以及匹配到的右边表的行,未匹配到的用null补满
交叉连接:生成笛卡尔积,它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行和另一个数据源的每个行一一匹配