跳到主要内容

Postgresql 触发器详解

触发器简介

触发器(Trigger)是与表相关联的一种数据库对象,它可以在特定的表上定义,以在表上执行自定义的操作。 当指定的事件(如插入、更新或删除)发生时,触发器会自动触发,并执行预定义的操作。

触发器经常用于加强数据的完整性约束和业务规则上的约束等在数据库中,为了提高自动化效率,往往会配置一些触发器,由某一事件的发生而触发运行指定的函数,增加数据库运行的自动化效率。

触发器(Trigger)是一种特殊的存储过程,它与表紧密相连,可以是定义表的一部分。当预定义的事件(如用户修改指定表或者视图中的数据)发生时,触发器将会自动执行。

触发器基于一个表创建,但是可以针对多个表进行操作。所以触发器可以用来对表实施复杂的完整性约束,当触发器所保存的数据改变时,触发器被自动激活,从而防止对数据进行不正确的修改。触发器的优点如下:

  1. 触发器自动执行,在表的数据做了任何修改(比如手工输入或者使用程序采集的操作)之后立即激活。

  2. 触发器可以通过数据库中的相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理。

  3. 触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其他表中的列。

触发器的分类

在Postgresql中,基于某个表或者视图数据变更的触发器被称为数据变更触发器(DML 触发器), 基于数据库事件的触发器被称为事件触发器(DDL 触发器)。 一般我们更多使用的是数据变更触发器。

对于数据变更触发器,PostgreSQL 支持两种级别的触发方式:行级(row-level)触发器和语句级(statement-level)触发器。 这两者的区别在于触发的时机和触发次数。 例如,对于一个影响 20 行数据的 UPDATE 语句,行级触发器将会触发器 20 次,而语句级触发器只会触发 1 次。