Oracle 外來鍵約束

2022-09-14 02:21:06 字數 3141 閱讀 3426

下面的語句建立department_20表,並定義和啟用department_id列上的外來鍵,該外來鍵引用departments表的department_id列上的主鍵:

create

table

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會自動為此列分配引用鍵的資料型別。

約束定義標識被引用鍵的父表和列。因為被引用的鍵是父表的主鍵,所以被引用的鍵列名是可選的。

或者,您可以不按行定義此外鍵約束:

create

table

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子句:

create

table

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列組合的外來鍵:

alter

table

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 ...