如何理解递归触发器?怎样设置允许递归触发器生效?
2个回答
展开全部
递归触发器
在SQL Server 2000的默认情况下,触发器不会以递归方式自行调用,除非数据库管理员单独设置了数据库选项RECURSIVE_TRIGGERS。
触发器有两种不同的递归方式,直接递归和间接递归。
1.直接递归
当触发器被激活并执行一个操作时,该操作又使用同一个触发器再次执行操作,被称为直接递归。
例利用触发器的直接递归,当在表中删除一条记录时,通过触发器删除表中所有编号相同的记录。
2.间接递归
更改表1中的数据时,触发器被激活并执行一个操作,而该操作又使另一个表2中的某个触发器被激活。表2中的这个触发器使表1得到更新,从而再次激活表1中的触发器,被称为间接递归。
例如,一应用程序更新了表TA,并引发触发器Trigger_A。Trigger_A更新表TB,从而使触发器Trigger_B被引发。Trigger_B转而更新表TA,从而使Trigger_A再次被引发间接递归。
可以利用系统存储过程sp_dboption关闭直接递归,但这又会开启间接递归。若要把这两种类型的递归都禁止,需要使用系统存储过程sp_configure。
在SQL Server 2000的默认情况下,触发器不会以递归方式自行调用,除非数据库管理员单独设置了数据库选项RECURSIVE_TRIGGERS。
触发器有两种不同的递归方式,直接递归和间接递归。
1.直接递归
当触发器被激活并执行一个操作时,该操作又使用同一个触发器再次执行操作,被称为直接递归。
例利用触发器的直接递归,当在表中删除一条记录时,通过触发器删除表中所有编号相同的记录。
2.间接递归
更改表1中的数据时,触发器被激活并执行一个操作,而该操作又使另一个表2中的某个触发器被激活。表2中的这个触发器使表1得到更新,从而再次激活表1中的触发器,被称为间接递归。
例如,一应用程序更新了表TA,并引发触发器Trigger_A。Trigger_A更新表TB,从而使触发器Trigger_B被引发。Trigger_B转而更新表TA,从而使Trigger_A再次被引发间接递归。
可以利用系统存储过程sp_dboption关闭直接递归,但这又会开启间接递归。若要把这两种类型的递归都禁止,需要使用系统存储过程sp_configure。
参考资料: 明日系列编程词典--SQL Server 编程词典体验版
展开全部
是不是说级联触发器?
就是 触发器 里写的语句执行的时候又能触发另外一个触发器
比如 建立触发器1: 在执行表1的insert操作的时候触发insert表2;
建立触发器2: 在执行表2的insert的时候触发insert 表3;
建立触发器3:在执行表3insert的时候触发insert1表1。
从理论上来说如果允许级联触发,上面三个触发器会无限循环触发下去。
当然实际的数据库不可能能让你建立这样的触发器。
稍微分析下就知道这种级联触发器可能引起的问题是很可怕很复杂的,所以MySql目前也还不支持这种级联触发器,不知道其它数据库支不支持。
就是 触发器 里写的语句执行的时候又能触发另外一个触发器
比如 建立触发器1: 在执行表1的insert操作的时候触发insert表2;
建立触发器2: 在执行表2的insert的时候触发insert 表3;
建立触发器3:在执行表3insert的时候触发insert1表1。
从理论上来说如果允许级联触发,上面三个触发器会无限循环触发下去。
当然实际的数据库不可能能让你建立这样的触发器。
稍微分析下就知道这种级联触发器可能引起的问题是很可怕很复杂的,所以MySql目前也还不支持这种级联触发器,不知道其它数据库支不支持。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询