具有多列的 Oracle 主键

Oracle primary key with multiple column

我看过下面的 create table 语句:

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

所以这里 primary_key 有两列。但是如果我尝试下面的语句并尝试更改 table cruise_orders 并将列 order_date 添加到主键 pk_or_id 它会抛出一条错误消息“A table 只能有一个主键”。 那么它如何与第一个语句一起使用呢?以及为什么它不适用于第二个 alter 语句?

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

如果您希望 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);

如果 order_date 不同,那么您将能够获得重复的 cruise_order_id 值,反之亦然。