创建触发器
要创建触发器,你需要定义触发器的名称、触发的事件(BEFORE 或 AFTER)、触发的操作(INSERT、UPDATE、DELETE)、关联的表,以及触发时要执行的函数。
CREATE TRIGGER trigger_name
BEFORE INSERT OR UPDATE OR DELETE ON table_name
FOR EACH ROW
EXECUTE FUNCTION trigger_function();
在这个示例中:
- trigger_name 是触发器的名称。
- BEFORE 或 AFTER 指定触发器是在操作之前还是之后触发。
- INSERT OR UPDATE OR DELETE 指定触发器与哪些操作相关联。
- table_name 是触发器关联的表。
- FOR EACH ROW 指定触发器是行级触发器。
- EXECUTE FUNCTION trigger_function() 指定触发时要执行的函数。
触发函数
触发函数是在触发器触发时执行的函数。它通常包含自定义的业务逻辑。触发函数可以返回 NEW 和 OLD,这分别代表插入、更新或删除操作的新旧数据。
CREATE FUNCTION trigger_function() RETURNS TRIGGER AS $$
BEGIN
-- Custom logic here
RETURN NEW; -- or RETURN NULL; for BEFORE DELETE trigger
END;
$$ LANGUAGE plpgsql;
删除触发器
要删除触发器,可以使用 DROP TRIGGER 语句:
DROP TRIGGER trigger_name ON table_name;
示例
以下是一个简单的触发器示例,当在 employees 表中插入新记录时,会更新关联的 departments 表的计数。
CREATE TABLE departments (
dept_id SERIAL PRIMARY KEY,
dept_name VARCHAR(50),
employee_count INTEGER
);
CREATE TABLE employees (
emp_id SERIAL PRIMARY KEY,
emp_name VARCHAR(50),
dept_id INTEGER REFERENCES departments(dept_id)
);
CREATE OR REPLACE FUNCTION update_employee_count()
RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' THEN
UPDATE departments
SET employee_count = employee_count + 1
WHERE dept_id = NEW.dept_id;
ELSIF TG_OP = 'DELETE' THEN
UPDATE departments
SET employee_count = employee_count - 1
WHERE dept_id = OLD.dept_id;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER employee_count_trigger
AFTER INSERT OR DELETE ON employees
FOR EACH ROW
EXECUTE FUNCTION update_employee_count();
在上述例子中,update_employee_count 函数会根据插入或删除的操作更新相关部门的员工计数。然后,创建了一个触发器 employee_count_trigger,将其关联到 employees 表,以便在插入或删除记录时触发。
转载请注明出处:http://www.zyzy.cn/article/detail/8482/PostgreSQL