在現實世界中,很多資料具有唯一的特性,例如身份證號碼,在國家人口基本資訊表中,一定不會存在多個人用同乙個身份證號碼的情況,再例如手機號碼、qq號碼、銀行帳號等等,還有學生管理系統,學生的年級、班級和學號三個字段組合起來是唯一的標識。
如果表中乙個欄位或多個字段組合起來的值是唯一的,就可以作為表的主鍵,在建立或修改表時用primay key關鍵字來指定主鍵。乙個表只能有乙個主鍵,而且組成主鍵的每個字段值都不能為空。
主鍵的作用:
1)體現資料結構設計的合理性。
2)提公升資料操作的速度。
3)保證資料的完整性,在表中新增或修改記錄時,資料庫會檢查該記錄主鍵的值,不允許與其它記錄主鍵的值重複,這種做法有個專業的名詞:主鍵約束。
例如超女基本資訊表,編號的欄位名是id,在超女選秀活動中,每個超女的編號肯定是唯一的,不可能存在兩個編號相同的超女,否則會引起混亂,我們可以把id欄位設定為t_girl表的主鍵,後面的工作交給資料庫,如果試圖往表中插入多條id相同的記錄,資料庫將拒絕。
指定表的主建有兩種方法。
1)在create table時指定。
create table t_girl
( id char(4
)not null,
-- 編號
name varchar2(30
)not null,
-- 姓名
yz varchar2(20
) null,
-- 顏值
sc varchar2(20
) null,
-- 身材
weight number(4
,1)not null,
-- 體重
height number(3
)not null,
-- 身高
birthday date not null,
-- 出生時間
memo varchar2
(1000
) null,
-- 備註
primary key
(id)
-- 指定id為表的主鍵
);
2)修改已經建好的表,增加主鍵約束。
alter table 表名 add constraint 主鍵名 primary key
(欄位名1
,欄位名2,.
....
.欄位名n)
;
例如:
alter table t_girl add constraint pk_girl primary key
(id)
;
在oracle資料庫中,雖然主鍵不是必需的,但是最好為每個表都設定乙個主鍵,不管是單字段主鍵還是多欄位主鍵(復合主鍵),它的存在代表了表結構的完整性,主鍵還可以用於其他表的外來鍵關聯,外來鍵的知識下面再介紹。
外來鍵(foreign key)是用於表達兩個表資料之間的關係,將表中主鍵字段新增到另乙個表中,再建立兩個表之間的約束關係,這些欄位就成為第二個表的外來鍵。
超女選秀活動有兩個資料表:
1)賽區參數列
賽區**,賽區名稱,……。
2)超女基本資訊表
賽區**、超女編號、姓名、顏值、身材、身高、體重、……。
錄入超女基本資訊的時候要選擇賽區,為了保證資料的有效,要求錄入賽區**時,必須保證賽區參數列中有這個賽區**,否則資料是不一致的,為了保證資料的完整性,必須在程式中判斷資料的合法性。針對這種情況,在表結構設計中採用外來鍵來約束這兩個表的賽區**字段。
對賽區參數列來說,賽區**是該錶的主鍵。
對超女基本資訊表來說,賽區**是該錶的外來鍵。
賽區參數列也稱為主表,超女基本資訊表也稱為從表。
合理的資料結構設計,表中的資料一定有一致性約束,使用外來鍵,讓資料庫去約束資料的一致,不給任何人出錯的機會。不用外來鍵會怎樣?不用也不會怎麼樣,如果不用外來鍵,在程式中要寫**進行判斷,手工運算元據時也必須處處小心。
1)當對從表進行操作時,資料庫會:
a)向從表插入新記錄時,如果外鍵值在主表中不存在,阻止插入。
b)修改從表的記錄時,如果外來鍵的值在主表中不存在,阻止修改。
2)當對主表進行修改操作時,資料庫會:
a)主表修改主鍵值時,舊值在從表裡存在便阻止修改。
3)當對主表進行刪除操作時,資料庫會(三選一):
a)主表刪除行時,其主鍵值在從表裡存在便阻止刪除。
b)主表刪除行時,連帶從表的相關行一起刪除。
c)主表刪除行時,把從表相關行的外來鍵字段置為null。
建立外來鍵的語法:
alter table 從表名
add constraint 外鍵名 foreign key (從表字段列表)
references 主表名 (主表字段列表)
[on delete cascade|set null]
;
說明:
外鍵名,oracle的識別符號,建議採用fk_從表名_主表名的方式命名。
主表執行刪除行時,其主鍵值在從表裡存在便阻止刪除,如果on delete cascade,連帶從表的相關行一起刪除;如果on delete set null,把從表相關行的外來鍵字段置為null。
alter table 從表名 drop constraint 外鍵名;
/* 建立賽區參數列。 */
create table t_areacode
( areaid number(2
)not null,
-- 賽區**,非空。
areaname varchar(20
)not null,
-- 賽區名稱,非空。
memo varchar
(300),
-- 備註
primary key
(areaid)
-- 建立主健。);
/* 建立超女基本資訊表。 */
create table t_girl
( id char(4
)not null,
-- 編號
name varchar2(30
) null,
-- 姓名
areaid number(2
) null,
-- 賽區**
yz varchar2(20
) null,
-- 顏值
sc varchar2(20
) null,
-- 身材
memo varchar2
(1000
) null,
-- 備註
primary key
(id)
-- 建立主健。);
/* 以下三種建立外來鍵的方式只能三選一 */
/* 為t_girl建立外來鍵,無on delete選項。 */
alter table t_girl
add constraint fk_girl_areacode foreign key
(areaid)
references t_areacode
(areaid)
;/* 為t_girl建立外來鍵,採用on delete cascade選項。 */
alter table t_girl
add constraint fk_girl_areacode foreign key
(areaid)
references t_areacode
(areaid)
on delete cascade;
/* 為t_girl建立外來鍵,採用on delete set null選項。 */
alter table t_girl
add constraint fk_girl_areacode foreign key
(areaid)
references t_areacode
(areaid)
on delete set null;
Oracle的主鍵和外來鍵
在現實世界中,很多資料具有唯一的特性,例如身份證號碼,在國家人口基本資訊表中,一定不會存在多個人用同乙個身份證號碼的情況,再例如手機號碼 qq號碼 銀行帳號等等,還有學生管理系統,學生的年級 班級和學號三個字段組合起來是唯一的標識。如果表中乙個欄位或多個字段組合起來的值是唯一的,就可以作為表的主鍵,...
主鍵和外來鍵
主鍵和外來鍵是把多個表組織為乙個有效的關聯式資料庫的粘合劑。主鍵和外來鍵的設計對物理資料庫的效能和可用性都有著決定性的影響。必須將資料庫模式從理論上的邏輯設計轉換為實際的物理設計。而主鍵和外來鍵的結構是這個設計過程的癥結所在。一旦將所設計的資料庫用於了生產環境,就很難對這些鍵進行修改,所以在開發階段...
主鍵和外來鍵
主鍵的存在就代表著表結構的完整性,表的記錄必須得有唯一區分的字段,主鍵主要是用於其他表的外來鍵關聯,本記錄的修改與刪除,當我們沒有主鍵時,這些操作會變的非常麻煩。我強調主鍵不應該具有實際的意義,這可能對於一些朋友來說不太認同,比如訂單表吧,會有 訂單編號 字段,而這個欄位呢在業務實際中本身就是應該具...