在本教程中,您将学习如何使用oracle primary key
约束来管理表的主键。
主键是表中列的唯一标识表中的行的一列或多列的组合。
以下是设置列成为主键的规则:
null
值或空字符串。根据这些规则,以下是对主键的建议:
注意:尽管在oracle中不是强制性的,但在每个表中都有一个主键是最佳实践。
要在表中创建主键,可以使用primary key
约束。
通常,在创建表时创建表的主键。另外,通过使用alter table语句,可以在创建表之后再添加一个主键。
以下create table
语句创建purchase_orders
表:
create table purchase_orders (
po_nr number primary key,
vendor_id number not null,
po_status number(1,0) not null,
created_at timestamp with time zone not null
);
purchase_orders
表具有创建采购订单的四列采购订单号(po_nr
),供应商编号(vendor_id
),采购订单状态(po_status
)以及时间戳(created_at
)。
在此表中,通过使用primary key
子句将po_nr
列定义为主键。
请注意,primary key
子句隐式地将po_nrcolumn
设置为not null
,因此不必像以下那样定义列:
po_nr number not null primary key
本示例中的primary key
约束是内联约束,因为它与po_nr
列位于同一行。
考虑下面的语句 -
create table purchase_orders (
po_nr number,
vendor_id number not null,
po_status number(1,0) not null,
created_at timestamp with time zone not null,
constraint pk_purchase_orders primary key(po_nr)
);
这个例子使用primary key
约束作为表约束。注意以下子句:
constraint pk_purchase_orders primary key(po_nr)
另外,上面语句中明确地给primary key
主键约束分配了一个名称:pk_purchase_orders
。
以下语句创建采购订单项目表:
create table purchase_order_items (
po_nr number not null,
item_nr number not null,
product_id number not null,
quantity number not null,
purchase_unit number not null,
buy_price number (9,2) not null,
delivery_date date,
primary key (po_nr, item_nr)
);
在此示例中,purchase_order_items
表的主键由两列组成:po_nr
和item_nr
。 这意味着这些列的值的组合唯一地标识采购订单行项目。
此示例没有使用constraint
子句为primary key
约束显式分配一个名称。 因此,oracle隐式分配了主键约束,系统生成的名称(如sys_c0010617
)。
有时,您可能需要将主键约束添加到一个存在的表。要做到这一点,只需要使用alter table
语句,如下所示:
alter table table_name
add constraint constraint_name
primary key (column1, column2, ...);
以下示例首先创建vendors
表,然后向其添加主键约束:
create table vendors (
vendor_id number,
vendor_name varchar2(255) not null,
address varchar2(255) not null
);
alter table vendors
add constraint pk_vendors primary key (vendor_id);
一般很少会从表中删除primary key
约束。 如果必须要删除主键,则使用以下alter table
语句。
alter table table_name
drop constraint primary_key_constraint_name;
例如,可以按照以下方式删除vendors
表的主键约束:
alter table vendors
drop constraint pk_vendors;
可以使用以下语句删除表的主键:
alter table table_name
drop primary key;
例如:
alter table vendors
drop primary key;
要在将大量数据加载到表中或更新海量数据时需要提高性能,可以暂时禁用primary key
约束。
要禁用表的主键约束,可以使用alter table
语句:
alter table table_name
disable constraint primary_key_constraint_name;
或者,
alter table table_name
disable primary key;
例如,要禁用purchase_orders
表的主键约束,请使用以下语句:
alter table purchase_orders
disable constraint pk_purchase_orders;
或者,
alter table purchase_orders
disable primary key;
要启用主键约束,请使用以下alter table
语句:
alter table table_name
enable constraint primary_key_constraint_name;
或者,
alter table table_name
enable primary key;
以下示例启用了purchase_orders
表的primary key
约束:
alter table purchase_orders
enable constraint pk_purchase_orders;
或者,
alter table purchase_orders
enable primary key;
在本教程中,您学习了如何使用oracle primary key
约束,如创建,添加,禁用,启用和删除表的主键。