触发器可以分为以下几种类型:1.BEFORE触发器:在触发事件发生前执行,用于预处理数据。2.AFTER触发器:在触发事件发生后执行,用于处理数据变更后的操作。3.INSTEAD OF触发器:用于替代触发事件,通常用于表的插入或更新操作。4.FOR EACH ROW触发器:用于在每行数据被处理时执行,适用于多行操作。不同的触发器类型适用于不同的场景,开发者需要根据具体需求选择合适的触发器类型。
触发器的编写通常在数据库管理系统的SQL语句中实现,以下是一些常见的触发器编写方法:1.BEFORE触发器:在触发事件发生前执行,用于预处理数据。 例如,检查数据是否符合业务规则。```sqlCREATE TRIGGER before_insertBEFORE INSERT ON employeesFOR EACH ROWBEGIN IF NEW.salary < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Salary cannot be negative'; END IF;END;```2.AFTER触发器:在触发事件发生后执行,用于处理数据变更后的操作。 例如,记录数据变更日志。```sqlCREATE TRIGGER after_insertAFTER INSERT ON employeesFOR EACH ROWBEGIN INSERT INTO audit_log (employee_id, action, timestamp) VALUES (NEW.employee_id, 'INSERT', NOW());END;```3.INSTEAD OF触发器:用于替代触发事件,通常用于表的插入或更新操作。 例如,当插入新记录时,触发器可以执行自定义操作。```sqlCREATE TRIGGER instead_of_insertINSTEAD OF INSERT ON employeesFOR EACH ROWBEGIN INSERT INTO employees (name, department, salary) VALUES (NEW.name, NEW.department, NEW.salary); INSERT INTO audit_log (employee_id, action, timestamp) VALUES (NEW.employee_id, 'INSERT', NOW());END;```4.FOR EACH ROW触发器:用于在每行数据被处理时执行,适用于多行操作。 例如,更新多个记录。```sqlCREATE TRIGGER for_each_rowFOR EACH ROWBEGIN UPDATE employees SET salary = salary 1.1 WHERE employee_id = NEW.employee_id;END;```