一、存储过程sql
概念:它是一组将来完成特定功能的SQL语句集,经编译后存储在数据库中。存储过程可包含程序流,逻辑以及对数据库的查询。它们能够接受参数、输出参数、返回单个或多个结果集以及返回值。数据库
做用:安全
与其余程序共享应用程序逻辑,于是确保了数据访问和修改的一致性。网络
具备安全性和全部权连接,以及能够附件到它们的证书。架构
提供了安全机制。模块化
容许模块化程序设计。spa
能够减小网络通讯流量。设计
分类:code
用户自定义过程对象
系统存储过程
扩展存储过程
方法:
建立: |
create |
调用 |
exec |
修改 |
Alter |
删除 |
Drop |
临时存储过程
# |
局部临时存储过程 |
## |
全局临时存储过程 |
嵌套存储过程,最多能够嵌套32层。想要查看存储过程级数,可使用下面语句:
Print @@nestlevel
二、触发器
概念:触发器是一种特殊的存储过程,它是一个在修改指定表中的数据时执行的存储过程。常常经过建立触发器来强制实现不一样表中的逻辑相关数据的引用完整性或一致性。因为用户不能绕过触发器,因此能够用它来强制实施复杂的业务规则,以此确保数据的完整性。
为何使用触发器?
触发器自动执行,它们在标的数据做了任何修改后当即激活。
触发器能够经过对数据库中的相关表进行层叠更改,这比把代码写在前台更安全。
触发器能够强制限制,比check约束更复杂。与check不一样的是,触发器能够引用其余表中的列。
触发器种类 |
针对的对象 |
说明 |
DDL触发器 |
DDL事件 |
数据库架构进行更改 |
DML触发器 |
DML事件 |
update、delete、delete |
建立DDL触发器:
Create trigger T_notdelete On datebase For drop_table,alter_table as print ‘事务不能被处理,基础数据不能修改’ rollback
建立DML触发器:
--建立insert触发器 Create trigger T_addnum On 学生信息 For insert As update 班级信息 set 班级人数=班级人数+1 Where 班级编号=1
--建立delete触发器 Create trigger T_deleteteacher On 教师信息 For delete As Select 姓名 as 被删除的教师姓名, 性别,年龄,联系电话 from delete
--建立update触发器 Create trigger T_update On 教师信息 For update As If update (姓名) or update (性别) Begin Print ‘事务不能被处理,基础数据不能修改’ Rollback transaction End Else Print ‘数据修改为功’
触发器能够经过事件进行触发而被执行;存储过程能够经过存储过程名直接被调用。