数据库触发器是个坏主意吗?

根据我的经验,它们是邪恶的,因为它们会产生令人惊讶的副作用,并且很难调试(尤其是当一个触发器触发另一个触发器时).通常开发人员甚至不考虑是否有触发因素.

另一方面,如果每次在数据库中创建新的FOO时都必须有逻辑,那么最简单的地方就是在FOO表上插入触发器.

我们唯一一次使用触发器是为了非常简单的事情,比如设置ModifiedDate.

推荐答案

触发器的主要问题是

  • 它们是完全全球性的——无论表格活动的上下文是什么,它们都适用;
  • 它们是隐形的;人们很容易忘记它们的存在,直到它们以意想不到的(非常神秘的)后果伤害了你.

这只意味着它们需要在适当的情况下小心使用;根据我的经验,这仅限于关系完整性问题(有时粒度比声明性的要细);通常不用于商业或交易目的.YMMV.

Sql相关问答推荐

根据另一列的值添加另一列的给定值

Postgresql:从jsons数组到单个id索引的json

在Golang中管理数据库事务的简洁方法

为什么在postgres中,横向连接比相关子查询快?

删除事务中的本地临时表

使用拆分器将已分组的不同值连接在一起

SQL将三个表中的三列组合为一列

如何使用SQL生成数据的滚动3天总和

在 PostgreSQL 中生成时间序列查询

如何查询自引用 comments 表以查找带有回复的 comments ,并按最新回复排序?

如何 for each id创建长度等于id长度的不同日期序列?

获取上个月和上一年的值

如何从postgresql中的项目映射(关联数组)设置值?

snowflake中的动态文件名生成

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

使用 GROUP BY 时如何创建其他组?

基于源表的 SQL INSERT、UPDATE 和 DELETE

SQL查询以获取从特定可变日期看到的用户

如何根据 Amazon Athena 中的多个列值删除重复行?

如何在 Oracle 中获取此变量的值?