如何在MySQL中创建触发器,实现插入员工数据时记录审计信息?
实现Employees表插入操作的审计触发器
第一步:创建审计表Employees_audit
首先需要创建用于记录审计信息的表,结构如下:
CREATE TABLE Employees_audit ( AuditID INT IDENTITY(1,1) PRIMARY KEY, -- 自增主键,唯一标识每条审计记录 AuditMessage VARCHAR(100) NOT NULL, InsertedTime DATETIME NOT NULL );
AuditID:作为唯一标识,避免审计记录重复AuditMessage:存储指定的提示文本InsertedTime:记录插入操作发生的时间
第二步:创建INSERT触发器
根据你使用的数据库类型,选择对应的触发器代码:
SQL Server 版本
CREATE TRIGGER trg_Employees_Insert_Audit ON Employees AFTER INSERT AS BEGIN SET NOCOUNT ON; -- 避免返回影响行数的额外消息 INSERT INTO Employees_audit (AuditMessage, InsertedTime) VALUES ('A new row is inserted', GETDATE()); END;
MySQL 版本
DELIMITER // CREATE TRIGGER trg_Employees_Insert_Audit AFTER INSERT ON Employees FOR EACH ROW BEGIN INSERT INTO Employees_audit (AuditMessage, InsertedTime) VALUES ('A new row is inserted', NOW()); END // DELIMITER ;
Oracle 版本
CREATE OR REPLACE TRIGGER trg_Employees_Insert_Audit AFTER INSERT ON Employees FOR EACH ROW BEGIN INSERT INTO Employees_audit (AuditMessage, InsertedTime) VALUES ('A new row is inserted', SYSDATE); END; /
关键说明
AFTER INSERT:指定触发器在插入操作完成后执行- 不同数据库获取当前时间的函数不同:SQL Server用
GETDATE(),MySQL用NOW(),Oracle用SYSDATE SET NOCOUNT ON(仅SQL Server):防止触发器执行时返回额外的行数统计信息,避免干扰应用程序逻辑
内容的提问来源于stack exchange,提问作者Daryl Fox
相关产品推荐
相关产品推荐

