触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。看到这里,不难看出,小编在这里就是要对触发器进行讲解!
什么是触发器?
触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQLServer2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。
触发器优点:
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与CHECK约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的SELECT比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE或DELETE)允许采取多个不同的对策以响应同一个修改语句。
DML触发器分为:
1、after触发器(之后触发)
a、insert触发器
b、update触发器
c、delete触发器
触发器语法:
insteadof触发器(之前触发)
其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而insteadof触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义insteadof触发器,也可以在视图上定义。
触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。
Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。
创建触发器
语法
#创建insert类型触发器
insert触发器,会在inserted表中添加一条刚插入的记录。
#创建delete类型触发器
delete触发器会在删除数据的时候,将刚才删除的数据保存在deleted表中。
#创建update类型触发器
update触发器会在更新数据后,将更新前的数据保存在deleted表中,更新后的数据保存在inserted表中。
触发器示例
Example1
--禁止用户插入数据(实际上是先插入,然后立刻将其删除!)
createtriggertr_insertonbank
for--for表示执行之后的操作
insert--即先执行了插入操作,同时在临时表中保存了插入记录
as
--执行完插入之后,在新生成的表中将刚刚插入的那条记录删除,
--而此时得到的刚刚插入的记录的id是通过临时表inserted得到的
delete*frombankwherecid=(selectcidfrominserted)
生成上面的触发器后,当用户再输入insert语句后就见不到效果了!
如:insertintobankvalues('0004',10000),是插入不进数据库的。
Example2
--删除谁就让谁的账户加上10元
createtriggertr_daleteonbank
insteadof
delete
as
updatebankbalance=balance+10wherecid=(selectcidfromdeleted)
生成这个触发器之后,当用户输入delete语句后,对应的那个id不但没有被删除掉,而且他的账户增加了10元
如:deletefrombankwherecid='0002',执行完这句话后,编号为0002的账户会增加10元
小编结语:
触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作……同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
更多内容尽在课课家教育~~
¥199.00
¥48.00¥180.00
¥48.00¥180.00
¥199.00
¥29.90
¥798.00