create
table test2(id number,name varchar2(10)
constraint na not
null);
desc test2;
名稱 空值? 型別
---- -------- ------------
id number
name not
null varchar2(
10)
這邊在建立表t1的時候設定了三個列,id 型別為number,name 型別為varchar2,location 型別為varchar2同時location這個欄位的約束設定了乙個約束名稱p_locat,這是在建立表的時候給表中的字段進行約束的寫法
在表建立好之後給表加上約束,先建立兩張表dept 和emp分別以departments和employees為模板來建立,之後新增約束表dept中設定department_id為主鍵並設定好約束名稱為pk_dept_id,再設定emp的department_id欄位的約束名稱和它的外來鍵時dept的department_id欄位
create
table dept2 as
select
*from departments where0=
1;create
table emp2 as
select
*from employees where0=
1;alter
table dept2 add
constraint pk_dept_id primary
key(department_id)
;alter
table emp2 add
constraint fk_dept_id foreign
key(department_id)
references dept2(department_id)
;
需要注意的是,這邊在設定emp2表的外來鍵的時候emp2表為子表,dept2表為父表,這裡的主表的字段需要是該表中的唯一索引或者主鍵,否則就會在設定emp2表字段外來鍵的時候系統報錯。
create
table dept3 as
select
*from departments where0=
1;create
table e*** as
select
*from employees where0=
1;alter
table e*** add
constraint fk_dept_id foreign
key(department_id)
references dept3(department_id)
;錯誤報告 -
ora-
02270: 此列列表的唯一關鍵字或主鍵不匹配
02270.
00000
-"no matching unique or primary key for this column-list"
*cause: a references clause in a create
/alter
table statement
gives a column
-list for which there is
no matching unique
orprimary
keyconstraint
in the referenced table.*
action: find the correct column names using the all_cons_columns
catalog view
在這邊如果表一為表2的主表,在插入資料的時候需要先插入表1再插入表2,否則會報錯
insert
into emp2 select
*from employees;
錯誤報告 -
ora-
02291: 違反完整約束條件 (hr.fk_dept_id)
- 未找到父項關鍵字
學習方法 教中學 做中學 創中學
學習要以思考為基礎 一般的學習只是一種模仿,而沒有任何作用 思考由懷疑和答案組成,學習便是經常懷疑,經常隨時發問。懷疑是智慧型的大門,知道得越多,就越會發問,而問題就越多。所以,發問使人進步,發問和答案一樣重要。是毛毛雨,需不斷地滋潤 教師在傳授知識和技術的過程中,偶爾會傳授教訓,但這種教訓如果沒有...
重構中學習
今天,發現昨天下午新作的頁面中查詢資料時,條件裡出現了很多個0,程式是asp的。就開始向把0給直接刪除。開啟頁面一看,這些個0是從另外乙個函式返回的,就沒有貿然刪除,怕出錯。到另外乙個函式中,發現返回0並沒有錯誤,0是函式的預設值,不能從引數中直接把 0 直接改成空字元。那就呼叫端開始處理。在呼叫端...
中學時候的「黑客筆記」
晚上清理硬碟,無意中發現了很多年前我留下的 黑客學習筆記 和 黑客工具 我在中學時候,曾極度痴迷於所謂的 黑客技術 尤其是喜愛鑽研windows平台上的漏洞,入侵等。我有五六年不倒騰那些玩意了,現在對於那些命令和工具,似乎已經感到很陌生了。但是對於基本的原理和入侵思想,還是有點理解的。其實我當初應該...