在ORACLE資料庫中,什麼是主鍵?什麼是外來鍵

2022-03-15 09:20:30 字數 5478 閱讀 5537

1樓:現在孤身

主鍵就是自己設定的字段,該欄位不能為空,而且該字段的值必須唯一,外來鍵就是在主表中可以重複出現,但是它是另乙個表的主鍵,對過外來鍵使兩個表相關.

2樓:

主鍵、外來鍵的概念同資料庫原理

可以使用desc查詢表結構

3樓:

定義和其他的資料庫是一樣的

4樓:練秀芳殷綢

要通過查詢oracle的資料字典才能知道。

1、查主鍵名稱:

select

*from

user_constraints

where

table_name

='art'

andconstraint_type

='p';

查主鍵對應的列:

select

*from

user_cons_columns

where

table_name

='art'

andconstraint_name

='pk_art';

2、查索引名稱:

select

*from

user_indexes

where

table_name

='art';

查索引對應的列:

select

*from

user_ind_columns

where

table_name

='art'

andindex_name

='indx_ba';

資料庫中什麼是主鍵,什麼是外來鍵

5樓:四捨**入

主鍵(primary key): 也稱為主碼或主關鍵字,用於惟一地確定乙個元組的屬性或屬性組(復合主碼)。每個關係都有乙個並且只有乙個主碼。

外來鍵(foreign key):也稱為外碼或外部關鍵字。如果乙個屬性集不是所在關係的關鍵字,但是是其他關係的關鍵字,則該屬性集稱為外部關鍵字。

在關聯式資料庫中可以通過外來鍵使兩個關係關聯,這種聯絡通常是一對多(1:n)的,其中主(父)關係(1方)稱為被參照關係,從(子)關係(n方)稱為參照關係。

6樓:愛可生雲資料庫

外來鍵的設計初衷是為了在資料庫端保證對邏輯上相關聯的表資料在操作上的一致性與完整性。

優點:精簡關聯資料,減少資料冗餘

避免後期對大量冗餘處理的額外運維操作。

降低應用**複雜性,減少了額外的異常處理

相關資料管理全由資料庫端處理。

增加文件的可讀性

特別是在表設計開始,繪製 er 圖的時候,邏輯簡單明瞭,可讀性非常強。

缺點:效能壓力

外來鍵一般會存在級聯功能,級聯更新,級聯刪除等等。在海量資料場景,造成很大的效能壓力。比如插入一條新記錄,如果插入記錄的表有 10 個外來鍵,那勢必要對關聯的 10 張表逐一檢查插入的記錄是否合理,延誤了正常插入的記錄時間。

並且父表的更新會連帶子表加上相關的鎖。

其他功能的靈活性不佳

比如,表結構的更新等。

7樓:匿名使用者

主外來鍵的存在是依託兩個實體之間的關係而存在的;

比如班級與學生的關係:

乙個班級可以有多個學生,並且乙個學生只能屬於乙個班級,這就是一對多的關係;

那麼設計資料庫的時候就應該在學生表內存放班級的id作為外來鍵,為什麼不在班級表內放學生呢?

因為,你想一想班級表內如果放學生那麼記錄可能就是這樣:

1班id 1班 xx同學id

1班id 1班 xx同學id

..這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的;

下面簡單給你講下大概建成的表結構

--建班級表

create table class(

classid int primary key,--定義班級id為主鍵

classname varchar(15)

)--建學生表

create table students(

studentid int primary key,--定義學生id為主鍵

classid int ,--外鍵值,跟班級表classid 屬性型別相同

stuname varchar(20),--學生姓名

---定義外來鍵

foreign key(classid) references class(classid) --本表classid是基於class表classid的外來鍵

)---------

如上定義了主外來鍵後,兩個表間的關係就是一對多的關係了,並且學生表內的classid必須依託班級表的classid存在,也就是說外來鍵必須要主鍵存在的時候才能建立,例如:

--在班級表為空的情況往學生表插入一條記錄是不允許的:

insert into students(studentid,classid,stuname)values(1,1,'小明')

系統會丟擲異常提示主鍵表班級表內班級id不存在這樣是不允許插入的;

必須要先往班級表內插入一條記錄:

insert into class(classid,classname)values(1,'一班')

後才能執行插入前面一條往學生表插入資訊的語句..

--------------可了解一些了?真累啊.

8樓:小山山

一般每個表建議都有主鍵,比如表a和表b,

a的列式(aid,aa,bb,cc),其中aid就是主鍵,然後b是(bid,xx,yy,ab)bid為主鍵,ab是外來鍵對應a表的aid

然後你要是,然後你要查詢a表中的,aa,bb及b表中的xx,yy,且要是的b中xx,yy所在列的ab要等於a表中的aid,

然後即可以這樣寫select ..... from a a,b b where b.ab=a.aid

外來鍵差不多就是這樣的,設定好b中的外來鍵後,此ab的值只能是a中aid範圍內的值,不能搞乙個aid中都沒有的值

9樓:淦琳溪

我給你解釋吧!

拿你做例子嘍^-9,

你們一家人在乙個表中,你姥姥一家在乙個表中,表中有共同的乙個人,你媽媽,因為這是你的資料庫,所以以你家為主,你媽媽在你家是 你爺爺的兒媳婦,地位是「兒媳婦」,到了你姥姥那邊,你媽媽是 女兒,地位是「女兒」,不管到哪邊,她們是乙個人,是不變的,這樣兩家就關聯起來了。

關於表是不是非有主鍵和外來鍵,不一定哦,

其實可以將有主外來鍵關係的表合併,是吧?

為什麼要分開呢?主要是考慮到當資料量大的時候查詢效率的問題,這個就有點難了

什麼是主鍵與外來鍵?

10樓:景田不是百歲山

1、主關鍵字(主鍵,primary key)是被挑選出來,作表的行的惟一標識的候選關鍵字。乙個表只有乙個主關鍵字。主關鍵字又可以稱為主鍵。

主鍵可以由乙個字段,也可以由多個字段組成,分別成為單字段主鍵或多字段主鍵。

2、外來鍵:如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。

以另乙個關係的外來鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。

11樓:day忘不掉的痛

關係型資料庫中的一條記錄中有若干個屬性,若其中某乙個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為乙個主鍵比如 :

學生表(學號,姓名,性別,班級)

其中每個學生的學號是唯一的,學號就是乙個主鍵

使用者表(使用者名稱、密碼、登入級別)

其中使用者名稱是唯一的, 使用者名稱就是乙個主鍵

上機記錄表(卡號,學號,姓名、序列號)

上機記錄表中單一乙個屬性無法唯一標識一條記錄,學號和姓名的組合才可以唯一標識一條記錄,所以 學號和姓名的屬性組是乙個主鍵

上機記錄表中的序列號不是成績表的主鍵,但它和學生表中的學號相對應,並且學生表中的學號是學生表的主鍵,則稱成績表中的學號是學生表的外來鍵

定義主鍵和外來鍵主要是為了維護關聯式資料庫的完整性,總結一下:

主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份證號,姓名,年齡。身份證號是唯一能確定這個人的,其它都可能有重複,所以,身份證號是主鍵。

外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持資料的一致性。比如,a表中的乙個字段,是b表的主鍵,就可以是a表的外來鍵。

12樓:匿名使用者

這需要理清幾個概念:

1)候選鍵: 關係中的乙個屬性組,其值能唯一標識乙個元組,若從該屬性組中去掉任何乙個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。

2)主鍵:當有多個候選碼時,可以選定乙個作為主碼,選定的候選碼稱主鍵

3)外來鍵: 關係r中的乙個屬性組,它不是r的候選碼,但它與另乙個關係s的候選碼相對應,則稱這個屬性組為r的外碼或外來鍵。

舉個例子:

有兩個關係:

student(s#,sname,d#),即學生這個關係有三個屬性:學號,姓名,所在系別

dep(d#,dname),即院系有兩個屬性:系號、系名

則s#、d#是主鍵,也是各自所在關係的唯一候選鍵,d#是student的外來鍵。

13樓:

主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。

外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持資料的一致性。比如,a表中的乙個字段,是b表的主鍵,那他就可以是a表的外來鍵。

什麼是主鍵?什麼是外來鍵?它們之間有什麼關係?

14樓:倒霉熊

主鍵:能夠唯一表示資料表中的每個記錄的字段或者欄位的組合就稱為主鍵。乙個主鍵是唯一識別乙個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的資料進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指標,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定乙個或多個列的組合值具有唯一性,以防止在列中輸入重複的值,所以,主鍵的值對使用者而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯絡。

外來鍵:若有兩個表a,b,c是a的主鍵,而b中也有c欄位,則c就是表b的外來鍵,外來鍵約束主要用來維護兩個表之間資料的一致性。

a為基本表,b為資訊表。

在資料庫中,常常不只是乙個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關係,才能將它們的資料相互溝通,而在這個溝通過程中,就需要表中有乙個字段作為標誌,不同的記錄對應的字段取值不能相同,也不能是空白的,通過這個欄位中不同的值可以區別各條記錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重複,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據主鍵的值來確定不同的記錄。

關係:外來鍵一定是另外某個表的主鍵。

oracle資料庫中資料庫和表空間是等同的嗎

不等同。簡單的說,資料庫是乙個整體,乙個資料庫下可保護多個使用者 多個表 多個儲存過程 多個job 多個檢視等。而表空間可以認為是資料實體檔案的分類,比如有使用者表空間 系統表空間 索引表空間等,乙個表空間可以保護多個實體檔案。可以設定表空間的儲存大小,但實際使用多少由已存在的資料來決定。比如設定使...

在oracle資料庫中nvl 是什麼函式

nvl exp1,exp2 如果exp1的計算結果為null值,則nvl 返回exp2。如果exp1的計算結果不是null值,則返回exp1。使用樣例如下 1 建立測試表,create table test nvl value varchar2 50 2 插入測試資料 insert into tes...

在oracle資料庫中怎麼刪除表

刪除無任何資料物件的表空間 首先使用pl sql介面化工具回,或者使用oracle自帶的答sql plus工具,連線需要刪除的表空間的oracle資料局庫。確認當前使用者是否有刪除表空間的許可權,如果沒有 drop tablespace,請先用更高階的使用者 如sys 給予授權或者直接用更高階的使用...