首页 > 解决方案 > 具有多列的 Oracle 主键

问题描述

我已经看到下面的创建表语句:

    create table cruise_orders
 (cruise_order_id number, 
order_date date, 
constraint pk_or_id primary key (cruise_order_id,order_date));

所以这里的 primary_key 有两列。但是,如果我尝试以下语句并尝试更改表 Cruise_orders 并将列 order_date 添加到主键 pk_or_id 中,则会引发错误,提示“表只能有一个主键”。那么它如何与第一个语句一起使用?以及为什么它不适用于第二个 alter 语句?

create table cruise_orders
 (cruise_order_id number, 
order_date date, 
constraint pk_or_id primary key (cruise_order_id));

标签: oracleoracle11gprimary-keyalter-table

解决方案


如果您希望它cruise_order_id必须是唯一的,并且单独地,order_date必须是唯一的,则使用两个约束:

CREATE TABLE cruise_orders(
  cruise_order_id NUMBER,
  order_date      DATE, 
  CONSTRAINT cruise_orders__or_id__pk PRIMARY KEY(cruise_order_id)
);

ALTER TABLE cruise_orders ADD CONSTRAINT cruise_orders__order_date__u UNIQUE(order_date);

如果您确实希望对两列都有一个约束,请删除第一个约束并为两列创建第二个约束:

CREATE TABLE cruise_orders(
  cruise_order_id NUMBER,
  order_date      DATE, 
  CONSTRAINT cruise_orders__or_id__pk PRIMARY KEY(cruise_order_id)
);

ALTER TABLE cruise_orders DROP CONSTRAINT cruise_orders__or_id__pk;

ALTER TABLE cruise_orders ADD CONSTRAINT cruise_orders__coi__od__pk
  PRIMARY KEY(cruise_order_id, order_date);

然后,如果值不同,您将能够拥有重复cruise_order_id的值,order_date反之亦然。


推荐阅读