Navicat中勾选AI不生效,主因是字段未满足MySQL约束:必须为整数类型(如INT)、先设PK再勾AI,顺序错误或含NULL/重复值会导致静默失败或报错。
MySQL 表里勾选 AI 却不生效?先确认字段类型和主键顺序
navicat 模型(表设计)中勾选 ai 后没效果,大概率不是操作遗漏,而是底层约束没满足。mysql 要求自增列必须是整数类型(tinyint、int、bigint),且必须已设为主键——必须先勾 pk,再勾 ai,顺序反了会导致 ai 灰显或保存静默失败。
- 字段类型是
VARCHAR或TEXT?AI选项会直接不可用,Navicat 不报错但也不允许勾选 - 已有数据的表,若该列含
NULL值或重复值,Navicat 保存时可能无提示跳过,或报ERROR 1062: Duplicate entry - 字段类型为
INT UNSIGNED却只写INT修改语句,会触发ERROR 1067: Invalid default value for 'id'
PostgreSQL 的 AI 复选框点不了?看类型是否匹配 identity 机制
PostgreSQL 没有 AUTO_INCREMENT,Navicat 的 AI 开关实际映射为 GENERATED BY DEFAULT AS IDENTITY 或隐式 SERIAL。新建列时若类型选 INTEGER,AI 会灰显;只有选 SERIAL 或 BIGSERIAL 才可勾选——但这只是快捷方式,本质仍是创建序列+默认值表达式。
- 已有普通
INTEGER列无法通过图形界面“升级”为 identity,必须切到查询窗口执行:ALTER TABLE table_name ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY - PostgreSQL 10+ 推荐手动写
GENERATED BY DEFAULT AS IDENTITY,比SERIAL更可控,且支持OVERRIDING SYSTEM VALUE场景 - Navicat 旧版本(如 15)对
IDENTITY支持不全,编辑数据时可能报cannot insert into column "id" because it is a generated column
SQL Server 的“自增”叫标识列,PK 和 Identity 是两回事
SQL Server 中主键(PRIMARY KEY)和自增(IDENTITY)功能分离。Navicat 图形界面里,“主键”复选框控制唯一性约束,“标识”复选框才启用自增逻辑——两者必须同时启用,且仅对 TINYINT、SMALLINT、INT、BIGINT 有效。
- 修改已有列添加
IDENTITY属性?SQL Server 不允许直接ALTER COLUMN加标识,必须重建表或用DBCC CHECKIDENT重置种子 - 插入时显式指定
ID值会失败,除非先执行SET IDENTITY_INSERT table_name ON - 标识种子(
seed)和增量(increment)在 Navicat 设计器里可填,默认是(1,1),但导出 SQL 时需确认是否包含IDENTITY(1,1)定义
保存按钮没点?Navicat 的“设置”只是草稿,不是执行
所有数据库类型下,Navicat 表设计器里的 PK、AI、NOT NULL 等勾选都只是本地标记,不点右上角保存按钮(或按 Ctrl+S),就不会真正执行 ALTER TABLE 语句。状态栏显示 Unsaved changes 就是明确提醒。
- MySQL 下未保存就关闭窗口,Navicat 不会回滚,也不会警告,但结构毫无变化
- PostgreSQL 下可通过
SELECT conname, contype FROM pg_constraint WHERE conrelid = 'table'::regclass验证主键是否真被添加 - 导出建表 SQL 时,务必勾选
Include AUTO_INCREMENT value或Include IDENTITY,否则新库重建后自增值从 1 开始,而非延续原值











