Oracle的聯合主鍵以及外來鍵約束建立的問題

2021-09-22 08:17:31 字數 2970 閱讀 2479

方法僅供參考

最近在寫專案的時候因為一些特殊原因會用到聯合主鍵,當時並不知道怎麼去寫聯合主鍵,後來在網上一直找方法,總結了一下的過程,因為是第一次寫,所以並沒有寫為什麼這麼去寫,只是去寫了怎麼做的!

首先,下邊是我的資料庫的dml語句,由於一些原因,不能洩露原始碼,只能仿照著寫乙個:

大概是這樣的,有三個表store表和fruit表和order表,我想在fruit表中設定聯合主鍵,然後在order表中對聯合主鍵製作外來鍵

//store表

create table store

( sid primary key //這是store表的主鍵);

//fruit表

create table fruit

( fid number primary key,

//這個是fruit表的主鍵

sid number primary key,

//對sid設定外來鍵

constraint s_f_fk foreign key

(sid) references store

(sid)

);

但是,在執行建立fruit表的時候,會出現乙個錯誤:ora-02260:表只能具有乙個主鍵

錯誤原因就是:在資料庫中只能有乙個主鍵,而我在建立資料庫表的時候出現了兩個主鍵,所以會出現ora-02260這樣的問題。

可是,如果不設定兩個主鍵的話,就和需求背道而馳了,所以我去查詢了一下怎麼在oracle資料庫中設定兩個主鍵(也就是聯合主鍵)。

上邊說了在建立表的時候同時設定了兩個毫無關係的主鍵,導致了這個錯誤:ora-02260,所以在建立資料庫表的時候需要這麼寫:

create table store

( sid primary key //這是store表的主鍵);

//fruit表

create table fruit

( fid number,

//在建立表的時候不去設定主鍵

sid number,

//對sid設定外來鍵

constraint s_f_fk foreign key

(sid) references store

(sid));

//在建立表之後對錶進行修改表結構的方式新增聯合主鍵

alter table fruit add constraint fruit_pk primary key

(fid,sid)

;

執行之後你就會發現聯合主鍵建立成功了:

我是在order表中設定的外來鍵,所對應的主鍵就是在fruit表中的fid欄位和sid字段,也就是我在上邊設定的聯合主鍵。

//order表

create table order

( oid number primary key,

//order表主鍵

fid number,

//對fid新增外來鍵約束

constraint o_f_f_fk foreign key

(fid) references fruit

(fid)

,

sid number,

//對sid新增外來鍵約束

constraint o_f_s_fk foreign key

(sid) references fruit

(sid)

);

在執行建立order表的時候會出現乙個錯誤:ora-02270:此列列表的唯一關鍵字或主鍵不匹配

在這裡出現ora-02270錯誤的原因是:在建立fruit表的時候,我對sidfid這兩個字段設定了聯合主鍵,而且在建立新錶order表的時候,我對sidfid兩個字段新增外來鍵的時候是分別新增的外來鍵。

解決辦法:在建立order表的時候同時新增外來鍵約束:

create table order

( oid number primary key,

//order表主鍵

fid number,

//在建立order表的時候先不對fid和sid欄位新增外來鍵約束

sid number);

//在建立表之後使用修改表結構的方式對錶新增外來鍵約束

alter table order add constraint o_f_fk foreign key

(fid,sid) references fruit

(fid,sid)

;

執行之後就會發現外來鍵約束新增成功。

當你在建立完外來鍵約束的order表中新增資料的時候一定要注意:order表中的fid欄位和sid欄位,要麼為空值,要麼插入資料在fruit表中存在,否則,會出現ora-02291:違反完整約束條件的錯誤!

外來鍵和聯合主鍵

create table votemaster voteid int foreign key references votemaster voteid 外來鍵 votedetailsid int not null,voteitem varchar 20 not null,votenum int de...

超鍵 候選鍵 主鍵 外來鍵 聯合主鍵 復合主鍵

首先看看各種鍵的定義 超鍵 super key 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵 只要有乙個鍵唯一,再隨便組其他的鍵,合起來叫主鍵 候選鍵 candidatekey 不含有多餘屬性的超鍵稱為候選鍵 最小的超鍵,id,身份證號 主鍵 primary key 關係型資料庫中的一條記錄中有...

Oracle的主鍵和外來鍵

在現實世界中,很多資料具有唯一的特性,例如身份證號碼,在國家人口基本資訊表中,一定不會存在多個人用同乙個身份證號碼的情況,再例如手機號碼 qq號碼 銀行帳號等等,還有學生管理系統,學生的年級 班級和學號三個字段組合起來是唯一的標識。如果表中乙個欄位或多個字段組合起來的值是唯一的,就可以作為表的主鍵,...