Navicat Premium 16+ 已移除「约束」选项卡,唯一约束需通过索引面板创建 UNIQUE 索引或执行 ALTER TABLE ... ADD UNIQUE 语句实现;前者操作快捷但依赖数据无重复,后者更可控、可审计、便于版本管理。
navicat premium 16 及后续版本已移除「约束」选项卡,直接添加 unique 约束的图形入口不再可见。但唯一性仍可通过两种可靠方式实现:用索引面板模拟唯一约束,或手写 alter table ... add unique 语句。前者适合快速验证,后者更可控、可复现。
在索引面板里加“UNIQUE”索引(最常用)
MySQL 中,唯一约束底层就是唯一索引,Navicat 利用这点提供间接支持。关键不是找“约束”,而是进“索引”:
- 右键表 → 「设计表」→ 切换到
索引选项卡(不是「约束」或「字段」) - 点击「添加索引」,填入:
-
索引名:建议带语义,如uk_user_email(避免纯数字或默认名) -
字段:从下拉列表选目标列(如email),多列唯一就 Ctrl+多选 -
类型:必须选UNIQUE(不是INDEX或FULLTEXT)
-
- 保存后,Navicat 会自动生成并执行类似
CREATE UNIQUE INDEX uk_user_email ON user(email)的语句 - ⚠️ 注意:如果该字段已有重复值,保存会失败,并提示
Duplicate entry 'xxx' for key 'uk_user_email'—— 必须先清理数据再操作
用 SQL 直接添加 UNIQUE 约束(推荐用于生产)
图形界面易误操作,SQL 方式明确、可审计、便于版本管理:
- 右键数据库 → 「新建查询」,执行:
ALTER TABLE user ADD UNIQUE uk_user_phone (phone);
- 括号内是字段名,
uk_user_phone是约束名(可省略,MySQL 会自动生成如user_phone,但显式命名更利于后续删除) - 若要为多列组合设唯一(如防止同一用户多次提交同一天记录),写成:
ALTER TABLE user_action ADD UNIQUE uk_user_date (user_id, action_date);
- 执行前务必确认表无历史重复数据,否则报错:
ERROR 1062 (23000): Duplicate entry '...' for key 'uk_user_phone' - 删除时也靠 SQL:
ALTER TABLE user DROP KEY uk_user_phone;(注意是DROP KEY,不是DROP CONSTRAINT)
为什么不能勾选字段旁的“UQ”复选框?
部分老教程提到在「字段」面板勾选「UQ」列,这在 Navicat 15 及更早版本存在,但 16+ 已彻底移除该 UI 元素。如果你看到灰色/不可点的「UQ」,说明当前 Navicat 版本不支持该交互 —— 不是操作错误,是功能被删了。
强行尝试只会浪费时间;转向索引面板或 SQL 是唯一有效路径。另外,Oracle / PostgreSQL 用户注意:ADD UNIQUE 语法一致,但约束名在 Oracle 中需用 DROP CONSTRAINT 删除,而非 DROP KEY。


















