失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql 触发器 instead of_AFTER触发器与INSTEAD OF触发器

mysql 触发器 instead of_AFTER触发器与INSTEAD OF触发器

时间:2023-03-14 23:47:51

相关推荐

mysql 触发器 instead of_AFTER触发器与INSTEAD OF触发器

在对表进行操作时,总会产生 INSERTED 和(或)DELETED表,不管这个操作是否已经进行。这里的和/或,要看进行的什么操作,插入,产生 INSERTED 表,删除,产生DELETED表,而update则两个都会产生

INSTEAD OF 触发器

在本章第五节我们已经指出SQL Server 2000 支持AFTER 和INSTEAD OF 两种类型的触发器。其中INSTEAD OF 触发器是SQL Server 2000 的新添加的功能,AFTER 触发器等同于以前版本中的触发器。当为表或视图定义了针对某一操作(INSERT、 DELETE、 UPDATE) 的INSTEAD OF 类型触发器且执行了相应的操作时,尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL 语句本身。

INSTEAD OF 触发器的主要优点是使不可被修改的视图能够支持修改。其中典型的例子是分割视图(partitioned view)。为了提高查询性能,分割视图通常是一个来自多个表的结果集,但是也正因此而不支持视图更新。下面的例子说明了如何使用INSTEAD OF触发器来支持对分割视图所引用的基本表的修改

INSTEADOF触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE或DELETE操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEADOF触发器的动作要早于表的约束处理。

INSTEADOF触发器的操作有点类似于完整性约束。在对数据库的操纵时,有些情况下使用约束可以达到更好的效果,而如果采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。

INSTEADOF触发器不仅可在表上定义,还可在带有一个或多个基表的视图上定义,但在作为级联引用完整性约束目标的表上限制应用。

AFTER触发器定义了对表执行了INSERT、UPDATE或DELETE语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用AFTER触发器。AFTER触发器只能在表上指定,且动作晚于约束处理。

每一个表上只能创建一个INSTEADOF触发器,但可以创建多个AFTER触发器。

实例:

INSTEADOF触发器:

向表“计0261”插入数据时,检查学号是否存在于表“计026”中,如存在则进行插入操作,否则就不插入。

SQL code

AFTER触发器:

对订货表设置AFTER(FOR)类型的INSERT触发器,用来在插入记录时自动将统计值计算到订货统计表中。

SQL code

如果觉得《mysql 触发器 instead of_AFTER触发器与INSTEAD OF触发器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。