ALTER TABLE中ADD UNIQUE与ADD CONSTRAINT命名UNIQUE的区别 含组合唯一键场景
唯一约束创建语句差异说明
两种写法在约束的功能、生效规则上完全一致,唯一的区别在于约束名的控制权:
- 写法1:
ALTER TABLE [TABLE] ADD CONSTRAINT [Cons_name] UNIQUE (Columname);
属于手动指定约束名,你可以把[Cons_name]替换为符合你命名规范的自定义名称。后续需要删除、修改这个约束的时候可以直接用自定义的名称操作,不需要额外查询数据库系统表获取自动生成的名称,跨数据库环境迁移时也能保证约束名统一,避免出现不同环境约束名不一致导致的操作错误。 - 写法2:
ALTER TABLE [TABLE] ADD UNIQUE (Columname);
没有指定约束名,会由数据库按照自身规则自动生成默认约束名,不同数据库的生成规则各不相同,比如MySQL会生成带字段名和序号的名称,SQL Server会生成带随机哈希后缀的名称。后续维护时需要先查询系统表才能拿到约束名,操作流程更繁琐,跨环境迁移时也容易因为约束名不统一出现问题。
组合唯一约束的差异
两种写法的差异和单字段场景完全相同,没有额外区别:
- 手动指定名称的组合唯一约束写法示例:
ALTER TABLE [TABLE] ADD CONSTRAINT [Cons_name] UNIQUE (column1, column2, column3);
- 不指定名称的组合唯一约束写法示例:
ALTER TABLE [TABLE] ADD UNIQUE (column1, column2, column3);
生产环境更推荐使用手动指定约束名的写法,能大幅降低后续DDL维护的成本。
内容的提问来源于stack exchange,提问作者Flib
相关产品推荐
相关产品推荐

