PostgreSQL 触发器学习笔记

什么是触发器

触发器是一种特殊类型的数据库对象,它通过响应数据库中的某些事件来执行一系列操作。在 PostgreSQL 中,触发器可以用于 INSERT、UPDATE 或 DELETE 操作,以及创建或删除表时自动运行代码。

触发器实际上就是一段存储在数据库中的 SQL 代码,它们被绑定到一个特定的表中,以响应该表上特定的事件。

触发器的语法

创建一个触发器的语法如下:

sqlCopy Code
CREATE TRIGGER trigger_name { BEFORE | AFTER } { event } ON table_name [ FOR EACH ROW ] EXECUTE FUNCTION trigger_function()

其中:

  • trigger_name:触发器的名称。
  • event:要触发的事件(INSERT、UPDATE 或 DELETE)。
  • table_name:要绑定触发器的表的名称。
  • FOR EACH ROW:指定触发器在每一行上执行还是只在整个语句级别上执行。
  • trigger_function():要执行的 SQL 函数。

触发器的实例

以下是一个触发器的示例,它将记录每个人员的职位和薪资变化:

sqlCopy Code
CREATE TRIGGER employee_changes AFTER UPDATE OF position, salary ON employees FOR EACH ROW EXECUTE FUNCTION log_employee_changes();

此触发器会在 employees 表上的 positionsalary 列发生更改后自动运行 log_employee_changes() 函数,该函数将对这些更改进行记录。

以下是 log_employee_changes() 函数的一个示例实现:

sqlCopy Code
CREATE FUNCTION log_employee_changes() RETURNS TRIGGER AS $$ BEGIN IF (TG_OP = 'UPDATE') THEN INSERT INTO employee_changes_log (employee_id, change_time, old_position, new_position, old_salary, new_salary) VALUES (OLD.id, now(), OLD.position, NEW.position, OLD.salary, NEW.salary); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;

此函数将在触发器运行时自动执行,将旧值和新值插入到名为 employee_changes_log 的另一个表中。

总结

以上是 PostgreSQL 触发器的学习笔记和示例。触发器是一种很有用的数据库工具,可以使您的代码更加模块化、可维护和高效。在使用触发器时,需要仔细考虑其用途和影响,并编写安全、健壮的代码。