设计MySQL日志表用于记录数据变更,需包含操作类型、用户、时间、IP等信息,使用JSON字段存储新旧数据,通过触发器自动写入,并在user_id和changed_at上建立索引以提升查询效率。
设计MySQL数据日志表,核心目标是记录关键数据的变更历史,便于追踪、审计和恢复。重点在于结构清晰、性能可控、查询方便。
先确定你要记录什么:
以记录用户表(user)的变更为例,设计日志表 user_log:
CREATE TABLE user_log ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, operation ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL, user_id INT NOT NULL COMMENT '关联的用户ID', old_data JSON DEFAULT NULL COMMENT '变更前的数据', new_data JSON DEFAULT
NULL COMMENT '变更后的数据',
changed_by VARCHAR(50) DEFAULT NULL COMMENT '操作人',
changed_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
ip_address VARCHAR(45) DEFAULT NULL COMMENT '操作IP'
);
说明:
可通过触发器自动记录,例如为 user 表创建 UPDATE 触发器:
DELIMITER ;; CREATE TRIGGER user_after_update AFTER UPDATE ON user FOR EACH ROW BEGIN INSERT INTO user_log (operation, user_id, old_data, new_data, changed_by, ip_address) VALUES ('UPDATE', NEW.id, JSON_OBJECT('name', OLD.name, 'email', OLD.email), JSON_OBJECT('name', NEW.name, 'email', NEW.email), @operator, @ip); END;; DELIMITER ;注意: