什么是外键?
1)在Oracle数据库中,外键是用来实现参照完整性的方法之一。打个形象的比喻,外键是指定义外键的表的列的值必须在另一个表中出现。
2)被参照的表称之为父表(parent table),创建外键的表称之为子表(child table)。子表中的外键关联了父表中的主键。
3)外键可以在创建表时定义或者通过ALTER TABLE语句创建。
查询数据库所有外键约束
select * from DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'R';
关掉所有外键约束
SELECT 'alter table '|| t.table_name || ' disable constraint ' || t.CONSTRAINT_NAME || ';'
FROM USER_CONSTRAINTS t WHERE t.CONSTRAINT_TYPE = 'R';
开启所有外键约束
SELECT 'alter table '|| t.table_name || ' enable constraint ' || t.CONSTRAINT_NAME || ';'
FROM DBA_CONSTRAINTS t WHERE t.CONSTRAINT_TYPE = 'R';
建表的时候定义外键:
CREATE TABLE table_name
(column1 datatype null/not null,column2 datatype null/not null,...CONSTRAINT fk_column FOREIGN KEY (column1,column2,... column_n) REFERENCES parent_table (column1,column2,...column_n)
);
创建单列外键
create table tb_supplier
(supplier_id number not null,supplier_name varchar2(50) not null,contact_name varchar2(50),CONSTRAINT pk_supplier PRIMARY KEY (supplier_id)
);
create table tb_products
(product_id number not null,product_name varchar2(100),supplier_id number not null,constraint fk_products_supplier foreign key (supplier_id) references tb_supplier(supplier_id)
);
创建多列外键:
create table tb_supplier
(supplier_id number not null,supplier_name varchar2(50) not null,contact_name varchar2(50),CONSTRAINT pk_supplier PRIMARY KEY (supplier_id,supplier_name)
);
create table tb_products
(product_id number not null,product_name varchar2(100),supplier_name varchar2(50),supplier_id number not null,constraint fk_products_supplier foreign key (supplier_id,supplier_name) references tb_supplier(supplier_id,supplier_name)
);
使用alter命令定义
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2,...column_n)
REFERENCES parent_table (column1,column2,...column_n);