【Oracle Database】数据库约束管理
短信预约 -IT技能 免费直播动态提醒
主键约束
SQL> alter table customers add constraint customers_pk primary key (customer_id);
Table altered.
col constraint_name for a30
col constraint_type for a15
col table_name for a30
col index_name for a30
SQL> select constraint_name,constraint_type,table_name,index_name,status from dba_constraints where constraint_type = 'P' and owner = 'SOE';
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME INDEX_NAME STATUS
------------------------------ --------------- ------------------------------ ------------------------------ --------
CUSTOMERS_PK P CUSTOMERS CUSTOMERS_PK ENABLED
col constraint_name for a30
col constraint_type for a15
col table_name for a30
col column_name for a30
SQL> select dba_cons_columns.constraint_name,
dba_cons_columns.table_name,
dba_cons_columns.column_name,
dba_cons_columns.position
from dba_constraints join dba_cons_columns
on (dba_constraints.constraint_name = dba_cons_columns.constraint_name)
where constraint_type = 'P' and dba_constraints.owner = 'SOE';
CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
------------------------------ ------------------------------ ------------------------------ ----------
CUSTOMERS_PK CUSTOMERS CUSTOMER_ID 1
禁用约束
SQL> alter table customers disable constraint customers_pk;
启用约束
SQL> alter table customers enable constraint customers_pk;
删除约束
SQL> alter table customers drop constraint customers_pk;
外键约束
SQL> alter table orders add constraint orders_customer_id_fk foreign key (customer_id) references customers (customer_id);
Table altered.
col constraint_name for a30
col constraint_type for a20
col table_name for a20
col r_constraint_name for a30
col delete_rule for a15
SQL> select constraint_name,constraint_type,table_name,r_constraint_name,delete_rule,status from dba_constraints where constraint_type = 'R' and owner = 'SOE';
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME R_CONSTRAINT_NAME DELETE_RULE STATUS
------------------------------ -------------------- -------------------- ------------------------------ --------------- --------
ORDERS_CUSTOMER_ID_FK R ORDERS CUSTOMERS_PK NO ACTION ENABLED
col child_table_name for a20
col father_table_name for a20
col child_column_name for a20
col father_column_name for a20
SQL> select dba_cons_columns.constraint_name,
dba_cons_columns.table_name as child_table_name,
dba_cons_columns.column_name as child_column_name,
dba_cons_columns.position,
dba_indexes.table_name as father_table_name,
dba_ind_columns.column_name as father_column_name
from
dba_constraints join dba_cons_columns on (dba_constraints.constraint_name = dba_cons_columns.constraint_name)
join dba_indexes on (dba_constraints.r_constraint_name = dba_indexes.index_name)
join dba_ind_columns on (dba_indexes.index_name = dba_ind_columns.index_name) where constraint_type ='R' and dba_constraints.owner = 'SOE';
CONSTRAINT_NAME CHILD_TABLE_NAME CHILD_COLUMN_NAME POSITION FATHER_TABLE_NAME FATHER_COLUMN_NAME
------------------------------ -------------------- -------------------- ---------- -------------------- --------------------
ORDERS_CUSTOMER_ID_FK ORDERS CUSTOMER_ID 1 CUSTOMERS CUSTOMER_ID
1、普通外键约束(如果存在子表引用父表主键,则无法删除父表记录)
SQL> alter table orders add constraint orders_customer_id_fk foreign key (customer_id) references customers (customer_id);
2、级联外键约束(可删除存在引用的父表记录,而且同时把所有有引用的子表记录也删除)
SQL> alter table orders add constraint orders_customer_id_fk foreign key (customer_id) references customers (customer_id) on delete cascade;
3、置空外键约束(可删除存在引用的父表记录,同时将子表中引用该父表主键的外键字段自动设为NULL,但该字段应允许空值)
SQL> alter table orders add constraint orders_customer_id_fk foreign key (customer_id) references customers (customer_id) on delete set null;
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341