navicat 不记录也不展示表结构修改人,因 mysql 默认无 ddl 审计字段;information_schema.tables 的 update_time 非 alter 时间,且无 create_user 等列;真正追溯需启用 audit_log 插件或规范 sql 注释+git 版本管理。
navicat 本身不记录、也不展示“谁修改了表结构”,它没有内置的 ddl 审计能力;你看到的任何修改人信息,都必须来自数据库服务器自身是否采集并暴露了该元数据——而绝大多数 mysql 部署默认不提供 create_user 或 last_altered_by 字段。
MySQL 8.0+ 的 information_schema.TABLES 不含修改人
很多人会查 information_schema.TABLES,但要注意:
-
CREATE_TIME和UPDATE_TIME是时间戳,但UPDATE_TIME对应的是最后一条INSERT/UPDATE/DELETE,不是 ALTER TABLE 时间 - 该视图里没有
CREATE_USER、ALTER_USER、LAST_ALTERED_BY等字段,MySQL 官方 schema 就没定义这些列 - 即使你执行过
ALTER TABLE t1 ADD COLUMN x INT,再查TABLES,也看不到是谁、什么时候执行的
Navicat 的「对象信息」和「DDL 标签页」只显示当前状态
右键表 → 「对象信息」→ 切换到 DDL 标签页,看到的是实时生成的 CREATE TABLE 语句:
- 它不包含历史版本,也没有「上一版」「对比」按钮
- 不记录执行人、客户端 IP、时间戳,甚至不保证和上次同步时的 DDL 完全一致(比如注释丢失、字段顺序重排)
- 双击复制出来的 DDL 是纯文本,无法直接用于 diff,除非你提前存档了旧版本
真正能查到“谁改的”,得靠数据库层日志或人工留痕
可行路径只有两条,且都和 Navicat 无关:
- 启用 MySQL
audit_log插件(8.0+),并确保audit_log_include_events = 'table_access,ddl';然后在 Navicat 中手动查mysql.audit_log表(需对应权限) - 开启
general_log并设置log_statement = 'ddl'(PostgreSQL 类似,用pg_stat_operations),但日志体积大、性能开销高,且需自己解析文本或二进制 binlog - 最现实的做法:所有
ALTER TABLE都在 Navicat 查询窗口中执行,并强制加注释,例如:-- @author: zhangsan @date: 2026-07-25 ALTER TABLE user ADD COLUMN updated_at DATETIME DEFAULT NOW();
再把这类 SQL 提交到 Git,靠 commit 记录追溯
容易被忽略的关键点:DDL 修改人信息从来不是“查出来的”,而是“存下来的”。Navicat 只是执行终端,不是审计系统;指望它自动告诉你“张三在周二改了 status 字段”,不如从第一天起就规范 SQL 注释和版本管理。











