下面的語句建立department_20表,並定義和啟用department_id列上的外來鍵,該外來鍵引用departments表的department_id列上的主鍵:
createtable
dept_20
(employee_id
number(4
), last_name
varchar2(10
), job_id
varchar2(9
), manager_id
number(4
), hire_date date,
salary
number(7,2
), commission_pct
number(7,2
), department_id
constraint
fk_deptno
references departments(department_id) );
約束fk_deptno確保dept_20表中為員工指定的所有部門都存在於departments表中。但是,員工可以擁有空的部門編號,這意味著他們沒有分配給任何部門。為了確保所有員工都被分配到乙個部門,除了引用約束之外,您還可以在dept_20表的department_id列上建立乙個非空約束。
在定義和啟用此約束之前,必須定義並啟用departments表的department_id列的主鍵或唯一約束。
外來鍵約束定義不使用foreign key子句,因為約束是以內聯方式定義的。不需要department_id列的資料型別,因為oracle會自動為此列分配引用鍵的資料型別。
約束定義標識被引用鍵的父表和列。因為被引用的鍵是父表的主鍵,所以被引用的鍵列名是可選的。
或者,您可以不按行定義此外鍵約束:
createtable
dept_20
(employee_id
number(4
), last_name
varchar2(10
), job_id
varchar2(9
), manager_id
number(4
), hire_date date,
salary
number(7,2
), commission_pct
number(7,2
), department_id,
constraint
fk_deptno
foreign
key(department_id)
references departments(department_id) );
此語句兩個變體中的外來鍵定義都省略了on delete子句,從而導致oracle在某個部門中有員工工作時,阻止刪除該部門。
on delete 示例
此語句建立dept_20表,定義並啟用兩個引用完整性約束,並使用on delete子句:
createtable
dept_20
(employee_id
number(4) primary
key,
last_name
varchar2(10
), job_id
varchar2(9
), manager_id
number(4) constraint
fk_mgr
references employees on
delete
setnull
, hire_date date,
salary
number(7,2
), commission_pct
number(7,2
), department_id
number(2) constraint
fk_deptno
references
departments(department_id)
ondelete
cascade );
由於第乙個on delete子句,如果從employees表中刪除了經理編號2332,則oracle將dept_20表中以前擁有經理2332的所有員工的經理id值設定為空。
由於存在第二個on delete子句,oracle將departments表中department_id值的任何刪除操作級聯到department_20表中依賴行的department_id值。例如,如果從departments表中刪除department 20,則oracle將從department_20表中刪除department 20中的所有員工。
復合外來鍵約束示例
以下語句定義並啟用dept_20表的employee_id和hire_date列組合的外來鍵:
altertable
dept_20
addconstraint
fk_empid_hiredate
foreign
key(employee_id, hire_date)
references
hr.job_history(employee_id, start_date)
exceptions
into wrong_emp;
約束fk_empid_hiredate確保dept_20表中的所有員工都具有員工表中存在的員工id和雇用日期組合。在定義和啟用此約束之前,必須定義並啟用乙個約束,該約束將employees表的employee_id和hire_date列的組合指定為主鍵或唯一鍵。
exceptions into 子句導致oracle將有關dept_20表中違反約束的任何行的資訊寫入 wrong_emp表。如果 wrong_emp 異常表不存在,則此語句將失敗。
oracle外來鍵約束
新建父表 sql create table teacher 2 3 id number primary key,4 name varchar2 10 5 table created.新建子表 sql 1 create table student 2 3 id number primary key,4...
Oracle 外來鍵約束
新增主鍵約束 alter table ga airline add constraint pk airline id primary key airline id 有三種形式的外來鍵約束 1 普通外來鍵約束 如果存在子表引用父表主鍵,則無法刪除父表記錄 alter table t invoice d...
oracle新增外來鍵約束
alter table gjjy.jy dic crop drop constraint fk zmlb alter table gjjy.jy dic crop drop constraint fk zwlb alter table gjjy.jy dic crop add constraint ...