Oracle多列主键创建规则及修改新增列报错问题咨询
主键修改报错原因及解决方案
报错核心原因
数据库主键的设计规则为:单张表仅允许存在1个主键约束,但该约束本身支持绑定1个或多个字段(即联合主键)。
- 首次建表时直接定义两列联合主键可正常执行,是因为你仅创建了1个主键约束,只是该约束同时关联了
cruise_order_id和order_date两个字段,完全符合单表单主键的规则。 - 修改时触发
A table can have only one Primary key报错,是因为你使用的ALTER语句逻辑为新增一个主键约束,而主键约束一旦创建完成,不支持直接修改其绑定的字段列表,你无法直接给已存在的pk_or_id主键追加新字段。
正确修改操作步骤
如果要把单列主键调整为联合主键,需要先删除原有主键约束,再新建包含所需字段的联合主键约束:
- 删除现有单列主键约束
ALTER TABLE cruise_orders DROP CONSTRAINT pk_or_id;
注意:执行删除前需确认无外键关联该主键,否则会触发外键约束报错。
- 新建两列联合主键约束
ALTER TABLE cruise_orders ADD CONSTRAINT pk_or_id PRIMARY KEY (cruise_order_id, order_date);
注意:执行前需确认表中现有数据满足
cruise_order_id+order_date组合无重复、无空值,否则会创建失败。
内容的提问来源于stack exchange,提问作者Sangathamilan Ravichandran
相关产品推荐
相关产品推荐

