oracle - 具有多列的 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));
解决方案
如果您希望它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
反之亦然。
推荐阅读
- java - 如果类名作为字符串传递,如何动态调用类的方法
- xamarin.forms - Xamarin 窗体 FlyoutMenu 文本颜色
- azure - 如何以编程方式对 Azure Kubernetes (AKS) 进行身份验证
- ios - 具有内部分发证书的 iOS 应用程序在某个时间点后崩溃
- java - 一个组件需要一个找不到的“org.springframework.security.config.annotation.ObjectPostProcessor”类型的bean
- php - 执行 Octave 程序时 PHP 无法输出图形
- python - 在一个 DataFrame 中计算具有条件的值并将结果添加到另一个 DataFrame
- android - Remove ripple effect from AutoCompleteTextView
- python - 如何在 Django 中正确构建和使用我的模型和表?
- artifactory - 如何将工件从一个工件实例复制到另一个?