什么是外键?
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);
