存储过程 |
概述:
一组未来完成特定功能的SQL语句集,经编译后存储在数据库中。可以包含程序流,逻辑,以及对数据库的查询。可以接受参数,输出参数,返回单个或者多个结果集以及返回值。
为什么使用存储过程?
1.存储过程与其他应用程序共享应用程序逻辑,因而确保了数据访问和修改的一致性
2.存储过程具有安全性和所有权链接,以及可以附加到他们的证书
3.存储过程提供了安全机制
4.存储过程允许模块化程序设计
5.存储过程可以减少网络通信流量
种类:
1.用户自定义存储过程
2.系统存储过程
3.扩展存储过程
创建存储过程
CREATE PROC[EDURE]procedure_name[;number]
[{@parameter data_type}
[VARYING][=default][OUTPUT]][,...n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
AS
sql_statement[...n]
使用OUTPUT参数,是一个输出参数
ENCRYPTION对文本进行加密
修改存储过程
Alter PROC[EDURE]procedure_name[;number]
[{@parameter data_type}
[VARYING][=default][OUTPUT]][,...n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS
sql_statement[...n]
关键词是修改存储过程,后边添加存储名称
删除存储过程
语法格式:
DROP PROCEDURE{procedure}[,...n]
规则
不能创建角色,不能创建默认值,不能创建架构,不能创建或修改触发器,不能创建或修改视图。。
存储过程:
1.系统自带存储过程
2.用户自定义存储过程
在表明前加井号#
单井号#局部临时存储过程
双井号##全局临时存储过程
触发器 |
触发器:
特殊的存储过程,是一个在修改制定表中的数据执行时执行的存储过程。通常通过事件进行触发。存储过程可以通过存储过程名字而被调动
优点:
1.自动执行,在表的数据作了任何修改之后立即激活
2.可以通过数据库中的相关表进行层叠更改
3.可以强制限制数据的完整性。。与CHECK约束不同时可以引用其他表中的列
种类:
1.DDL触发器
可以防止对数据库架构的修改
对数据表进行删除
记录数据库架构中的更改或者事件
2.DML触发器
可以查询其他表中的数据,并且可以进行,更改,删除,新增灯操作。
创建INSERT触发器
选择INSERT
CREAT TRIGGER trigger_name '创建触发器声明关键字
ON {table|view}
{
{{FOR|AFTER|INSTEAD OF}
{[DELECT][,][INSERT][,][YPDATE]}
AS
sql_statement '操作语句
}
}
创建DELETE触发器
{语法格式同上}选择DELETE
创建DDL触发器
CREATE TRIGGER trigger_name
ON{ALL SERVER|DATABASE}
WITH ENCRYPTION
{FOR|AFTER|{event_type}
AS
sql_statement
递归触发器
任何触发器都可以包含影响同一个表或者另一个表的UPDATE,INSERT或DELETE语句。如果启用递归触发器选项,那么改变表中数据的触发器,通过递归执行就可以再次出发自己。再数据库创建时,默认情况下递归触发器选项是禁用的,单可以使用ALTER DATABASE语句来启用它。
注意事项:
1.很复杂,必须经过有条理的设计和全面的测试
2.在任意点的数据修改会触发一系列触发器
3.所有触发器一起构成一个大事务
4.触发器最多只能递归16层