Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle主键
Oracle主键
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用oracle primary key约束来管理表的主键。

主键介绍

主键是表中列的唯一标识表中的行的一列或多列的组合。

以下是设置列成为主键的规则:

  • 主键列不能包含null值或空字符串。
  • 主键值在整个表中必须是唯一的。
  • 主键值不应随时间而改变。

根据这些规则,以下是对主键的建议:

  • 首先,主键应该是没有意义的。 有时,您可能需要使用有意义的数据,例如:社会安全号码(ssn),车辆识别号码(vin),电子邮件和电话号码等,这些数据被认为是唯一的。 但是,您不知道电子邮件或电话号码何时更改或被他人重复使用。 在这种情况下,会造成很多数据问题。
  • 其次,主键应该是紧凑的。 主键通常是数字的,因为oracle通常处理数字的速度比任何其他数据类型更快。

注意:尽管在oracle中不是强制性的,但在每个表中都有一个主键是最佳实践。

要在表中创建主键,可以使用primary key约束。

oracle primary key约束示例

通常,在创建表时创建表的主键。另外,通过使用alter table语句,可以在创建表之后再添加一个主键。

1. 创建由一列组成的主键

以下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

2. 创建由多个列组成的主键

以下语句创建采购订单项目表:

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_nritem_nr。 这意味着这些列的值的组合唯一地标识采购订单行项目。

此示例没有使用constraint子句为primary key约束显式分配一个名称。 因此,oracle隐式分配了主键约束,系统生成的名称(如sys_c0010617)。

2. 将主键添加到表中

有时,您可能需要将主键约束添加到一个存在的表。要做到这一点,只需要使用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);

3. 删除oracle primary key约束

一般很少会从表中删除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;

4. 启用/禁用oracle 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约束,如创建,添加,禁用,启用和删除表的主键。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册