SQLite 的触发器(Trigger)机制允许在特定数据库事件发生时自动执行操作:
-
触发器类型
- BEFORE 触发器:在操作执行前触发
- AFTER 触发器:在操作执行后触发
- INSTEAD OF 触发器:替代原始操作执行(主要用于视图)
-
触发事件
- INSERT:插入数据时触发
- UPDATE:更新数据时触发
- DELETE:删除数据时触发
-
创建触发器
sql-- BEFORE INSERT 触发器 CREATE TRIGGER update_timestamp BEFORE INSERT ON users FOR EACH ROW BEGIN SET NEW.created_at = CURRENT_TIMESTAMP; END; -- AFTER UPDATE 触发器 CREATE TRIGGER log_update AFTER UPDATE ON users FOR EACH ROW BEGIN INSERT INTO audit_log (table_name, operation, user_id) VALUES ('users', 'UPDATE', NEW.id); END; -
触发器中的特殊引用
- NEW.column:引用 INSERT 或 UPDATE 操作后的新值
- OLD.column:引用 UPDATE 或 DELETE 操作前的旧值
- NEW 只在 INSERT 和 UPDATE 中可用
- OLD 只在 UPDATE 和 DELETE 中可用
-
触发器应用场景
- 自动维护时间戳字段
- 实现审计日志
- 数据验证和约束
- 级联操作
- 数据同步
-
管理触发器
sql-- 查看触发器 SELECT * FROM sqlite_master WHERE type = 'trigger'; -- 删除触发器 DROP TRIGGER trigger_name; -- 列出表的触发器 PRAGMA trigger_list(table_name); -
限制和注意事项
- 触发器不能直接调用其他触发器(递归)
- 触发器执行会影响性能
- 复杂的触发器逻辑难以调试
- 避免在触发器中执行耗时操作
触发器是 SQLite 实现自动化数据维护和业务逻辑的重要工具。