什么是触发器?
根据百度百科的解释,触发器是SqlServer提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,他的执行不是有程序调用,也不是手工启动,而是由事件来出发,比如当对一个表进行增删改时就会激活它执行。触发器经常用于加强数据的文整形越是和业务规则等,触发器可以从DBA_TRIGGERS,USER_TRIGGERS 数据字典中查找到,Sql3的触发器是一个能由系统自动执行对数据库修改的语句。
触发器与存储过程唯一的区别就是,触发器无法通过EXECUTE语句执行,而是在用户执行Transact_sql语句时自动触发。
触发器的分类:
- DML(数据操纵语言 Data Manipulation Language)触发器
当数据库中表的数据发生变化时(Update、Insert、Delete)触发;主要用来强制执行业务规则,拓展约束,默认值等,因为约束只能约束同一张表的内容,而触发器则可以执行任意sql命令;
- DDL(数据定义语言 Data Definition Language)触发器
在数据库结构发生变化时触发,主要用来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
- 登陆触发器
主要响应登陆事件,如果登录失败则不触发登陆触发器。
触发器的优点?
1、触发器可以通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以有效地执行这些更改;
2、可以实现比check越是定义的约束更为复杂的约束;
3、触发器可以引用其他表中的列;
4、触发器可以评估数据修改前后的表状态,并根据其差异采取对策。
触发器的缺点?
1、在进行数据库导入导出的时候,可能会引起不必要的触发器逻辑。
触发器的写法
create trigger trigger_name
on {table_name view_name}
{for After Instead of }
[ insert, update,delete ]
as
sql_statement
SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。