存储过程与触发器面试

转:原文:https://blog.csdn.net/weixin_44100795/article/details/85562889 

1.存储过程和函数

存储过程重在处理数据,函数可以返回值。
(1)存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。
(2)函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
(3)可以理解函数是存储过程的一种,都是预编译的(块语句每次运行都会编译 存储过程块 一次编译多次运行 效率更高)
plsql块语句:
Begin
End
存储过程块
Create procedure prg_add()
As
Begin
End;
(4)函数可以没有参数,但是一定要有一个返回值,存储过程可以没有参数,不需要返回值。
(5)函数return返回值没有返回参数模式,存储过程通过out参数返回值,如果需要返回多个参数则建议使用存储过程(函数oracle 在函数可以使用in和out mysql不能使用out)
(6)在sql数据操纵(DML)语句中只能调用函数而不能调用存储过程

2.存储过程的概念,优点(或特点),写一个简单的存储过程

存储过程:是一组为了完成特定功能的SQL语句集,利用SQL Server所提供的T-SQL语言所编写的程序,经编译后存储在数据库中。
优点:
(1)执行速度快,存储过程只在创建时进行编译,以后每次执行不需要再重新编译,一般sql语句每执行一次就编译一次
(2)存储过程可重复使用
(3)安全性高(可设定只有某些用户才具有对指定存储过程的使用权)
(4)当对数据库进行复杂操作时,可完成复杂的判断和比较复杂的运算,可用存储过程封装起来
(5)易于维护和集中控制,当企业规则变化时在服务器中改变存储过程即可。无需修改 应用程序。
简单的存储过程:
create proc select_query @year int
as
select * from tmp where year=@year

3.触发器

(1)触发器:触发器可以看成是一个特殊的存储过程,存储过程是要显示调用去完成,而触发器可以自动完成。比如:当数据库中的表发生增删改操作时,对应的触发器就可以执行对应的PL/SQL语句块
(2)作用:维护表的完整性,记录表的修改来审计表的相关信息
分为:
DML触发器:当数据库服务器中发生数据操作语言事件时执行的存储过程,分为:After触发器和instead of触发器
DDL触发器:特殊的触发器,在响应数据定义语言(DDL)语句时触发,一般用于数据库中执行管理任务。DDL触发器是响应create、after、或drop开头的语句而激活
触发器用处还是很多的,比如校内网、开心网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目。因为触发器效率高
---------------------

原文地址:https://www.cnblogs.com/fengli9998/p/10223298.html