根据我的经验,它们不是一个好主意,因为它们可能会导致令人惊讶的副作用,并且很难调试(特别是当一个触发器触发另一个触发器时)。通常情况下,开发人员甚至不会考虑是否存在触发因素。

另一方面,如果每次在数据库中创建新FOO时都必须执行逻辑,那么将其放在FOO表上的插入触发器可能是最安全的地方。

我们唯一使用触发器的时候是非常简单的事情,比如设置一行的修改日期字段。

我正在努力弄清楚触发器是否有必要,并感谢任何建议。如果它们是必要的,在实施它们时要考虑的最重要的问题是什么?


当前回答

事实上,触发器经常被滥用。事实上,在大多数情况下,你甚至不需要它们。但这并不意味着它们就一定是坏事。

我想到的一个触发器很有用的场景是,当你有一个遗留应用程序,你没有源代码,也没有办法改变它。

其他回答

我同意。触发器的问题在于人,而不是触发器。尽管要看得更多,要考虑得更多,并且增加了编码员正确检查内容的责任,但我们不会为了简化工作而放弃索引。(糟糕的索引和糟糕的触发器一样糟糕)

触发器的重要性(在我看来)是…… -任何系统都应该始终处于有效状态 执行这种有效状态的代码应该集中(而不是写在每个SP中)

从维护的角度来看,触发器对于有竞争力的程序员和初级/业余程序员的问题非常有用。然而,这些人需要学习和成长。

我想这取决于你的工作环境。你有值得信赖的人吗?他们学习能力强,做事有条理?如果不是,你似乎有两个选择: -接受你不得不失去功能来补偿的事实 -接受你需要不同的人或更好的培训和管理

这些话听起来很刺耳,我想的确如此。但在我看来,这是基本事实……

说他们是邪恶的是一种夸张,但他们可以引起网格。当一个触发器触发其他触发器时,情况就变得非常复杂了。让我们假设它们很麻烦:http://www.oracle.com/technology/oramag/oracle/08-sep/o58asktom.html

由于多并发问题,在Oracle中使用触发器执行业务逻辑比看起来要难。在其他会话提交之前,您不会在另一个会话中看到更改。

不,他们不邪恶——他们只是被误解了:- d

触发器有一个有效的用途,但往往是作为一个复古黑客,最终使事情变得更糟。

如果您将DB作为应用程序的一部分进行开发,那么逻辑应该始终存在于进行调用的代码或scprocs中。触发器只会导致稍后的调试痛苦。

如果您了解锁、死锁以及DB如何访问磁盘上的文件,那么以正确的方式使用触发器(例如审计或归档直接DB访问)将非常有价值。

不是邪恶的。它们实际上简化了事情

1.记录/审计对记录甚至数据库模式的更改

您可以在ALTER TABLE上设置一个触发器,用于回滚生产环境中的更改。这应该可以防止任何意外的表修改。


2.跨多个数据库强制执行引用完整性(主键/外键关系等)

如果有副作用,那就是故意造成的问题。 在一些数据库系统中,没有其他方法可以设置一个自增字段,即主键ID字段。