具有多列的 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
值,反之亦然。
我看过下面的 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
值,反之亦然。