在本教程中,您将学习如何使用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_nr
和item_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
约束,如创建,添加,禁用,启用和删除表的主键。
1.本站所有内容只做学习和交流使用。 版权归原作者所有。
2.保证站内提供的所有可下载源码资源(软件等)都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。
3.本站部分内容均收集于网络!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。请联系站长邮箱:admin#ibian.online(#换成@)处理!