PostgreSQL 触发器学习笔记
什么是触发器
触发器是一种特殊类型的数据库对象,它通过响应数据库中的某些事件来执行一系列操作。在 PostgreSQL 中,触发器可以用于 INSERT、UPDATE 或 DELETE 操作,以及创建或删除表时自动运行代码。
触发器实际上就是一段存储在数据库中的 SQL 代码,它们被绑定到一个特定的表中,以响应该表上特定的事件。
触发器的语法
创建一个触发器的语法如下:
sqlCopy CodeCREATE 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 CodeCREATE TRIGGER employee_changes
AFTER UPDATE OF position, salary ON employees
FOR EACH ROW
EXECUTE FUNCTION log_employee_changes();
此触发器会在 employees
表上的 position
或 salary
列发生更改后自动运行 log_employee_changes()
函数,该函数将对这些更改进行记录。
以下是 log_employee_changes()
函数的一个示例实现:
sqlCopy CodeCREATE 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 触发器的学习笔记和示例。触发器是一种很有用的数据库工具,可以使您的代码更加模块化、可维护和高效。在使用触发器时,需要仔细考虑其用途和影响,并编写安全、健壮的代码。