mysql主鍵和外來鍵

2021-06-18 11:10:44 字數 3522 閱讀 8767

主鍵是本張表的主鍵,是唯一且非空的,而外鍵是另一張表中與這張表的某個欄位的型別,欄位名相同的字段,一般是用作關聯兩張或兩張以上的資料表時用的。

以下面三張表為例:

有三張表,一張表是讀者資訊,有乙個屬性為

readno

,一張表是圖書的資訊,有乙個屬性是

bookno

,一張表是借閱關係,有兩個屬性分別以讀者資訊表中的

readno

,和圖書資訊表中的

bookno

為外來鍵,我想問的是,在借閱關係表中插入資料時不是得自己寫入

readno

和bookno

嗎,這樣,設外來鍵還有什麼作用?

外來鍵取值規則:空值或參照的主鍵值。 (

1)插入非空值時,如果主鍵表中沒有這個值,則不能插入。 (

2)更新時,不能改為主鍵表中沒有的值。 (

3)刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。 (

4)更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。

簡言之:

起約束作用

,就是在借閱關係表中只能插入讀者

\圖書資訊表中存在的值

不然會出錯.

作用在於如果你插入的

readno

或者bookno

在兩個表中沒有,就會插不進去

主鍵與外來鍵

一、什麼是主鍵、外來鍵:

關係型資料庫中的一條記錄中有若干個屬性,若其中

某乙個屬性組

(注意是組

)能唯一標識一條記錄

,該屬性組就可以成為乙個主鍵 比如

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

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

課程表(課程編號

,課程名,學分

)  其中課程編號是唯一的

,課程編號就是乙個主鍵

成績表(學號

,課程號,成績

)  成績表中單一乙個屬性無法唯一標識一條記錄,學號和課程號的組合才可以唯一標識一條記錄,所以

學號和課程號的屬性組是乙個主鍵

成績表中的學號不是成績表的主鍵,但它和學生表中的學號相對應,並且學生表中的學號是學生表的主鍵,則稱成績表中的學號是學生表的外來鍵 同理

成績表中的課程號是課程表的外來鍵

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

主鍵是能確定一條記錄的唯一標識

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

外來鍵用於與另一張表的關聯

。是能確定另一張表記錄的字段,

用於保持資料的一致性

。比如,

a表中的乙個字段,是

b表的主鍵,那他就可以是

a表的外來鍵。

二、主鍵、外來鍵和索引的區別收藏

主鍵、外來鍵和索引的區別?

主鍵外來鍵

索引定義:

唯一標識一條記錄,不能有重複的,不允許為空

表的外來鍵是另一表的主鍵

, 外來鍵可以有重複的

,可以是空值

該欄位沒有重複值,但可以有乙個空值

作用:用來保證資料完整性

用來和其他表建立聯絡用的

是提高查詢排序的速度

個數:主鍵只能有乙個

乙個表可以有多個外來鍵

乙個表可以有多個惟一索引

聚集索引和非聚集索引的區別?

聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。

聚集索引,在索引頁裡直接存放資料,而非聚集索引在索引頁裡存放的是索引,這些索引指向專門的資料頁的資料。

鍵和外來鍵是把多個表組織為乙個有效的關聯式資料庫的粘合劑。主鍵和外來鍵的設計對物理資料庫的效能和可用性都有著決定性的影響。

必須將資料庫模式從理論上的邏輯設計轉換為實際的物理設計。而主鍵和外來鍵的結構是這個設計過程的癥結所在。一旦將所設計的資料庫用於了生產環境,就很難對這些鍵進行修改,所以在開發階段就設計好主鍵和外來鍵就是非常必要和值得的。

首先來談:主鍵。

關聯式資料庫依賴於主鍵—它是資料庫物理模式的基石。主鍵在物理層面上只有兩個用途:

1. 惟一地標識一行。

2. 作為乙個可以被外來鍵有效引用的物件。

基於以上這兩個用途,下面給出了我在設計物理層面的主鍵時所遵循的一些原則:

1. 主鍵應當是對使用者沒有意義的。如果使用者看到了乙個表示多對多關係的連線表中的資料,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。

2. 主鍵應該是單列的,以便提高連線和篩選操作的效率。

注:使用復合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應當具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞數

據庫提供了方便。其二是利用這種方法可以在描述多對多關係的連線表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復合主鍵常常導致不良的外來鍵,

即當連線表成為另乙個從表的主表,而依據上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表

主鍵的一部分,如此傳遞下去,越靠後的從表,其主鍵將會包含越多的列了。

3. 永遠也不要更新主鍵。實際上,因為主鍵除了惟一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對使用者無意義的原則被違反了。

注:這項原則對於那些經常需要在資料轉換或多資料庫合併時進行資料整理的資料並不適用。

4. 主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等。

5. 主鍵應當有計算機自動生成。如果由人來對主鍵的建立進行干預,就會使它帶有除了惟一標識一行以外的意義。一旦越過這個界限,就可能產生認為修改主鍵的動機,這樣,這種系統用來鏈結記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。

外來鍵是用來和其他表建立聯絡用的:這個表中的一列和另外乙個表中的一列相同,為了讓這兩個表聯絡起來,就把其中乙個表中的列設成外來鍵,把另外乙個表列設成主鍵,就實現了這兩個表的關聯。

ps:乙個表可以有多個外來鍵。但主鍵只能有乙個。

更多關於

mysql

主鍵和外來鍵: 主鍵

: 能夠唯一表示資料表中的每個記錄的【字段】或者【字段】的組合就稱為主碼(主鍵

)。乙個主鍵是唯一識別乙個表的每一記錄,但這只是其作用的一部分,主鍵的主要作用是將記錄和存放在其他表中的資料進行關聯。在這一點上,主鍵是不同表中各記

錄之間的簡單指標。主鍵約束就是確定表中的每一條記錄。主鍵不能是空值。唯一約束是用於指定乙個或多個列的組合值具有惟一性,以防止在列中輸入重複的值。

所以,主鍵的值對使用者而言是沒有什麼意義,並且和它要賦予的值也沒有什麼特別的聯絡。

外來鍵:若有兩個表a,

b,c是

a的主鍵,而

b中也有

c欄位,則

c就是表

b的外來鍵。外來鍵約束主要用來維護兩個表之間資料的一致性。 a

為基本表,

b為資訊表!!!!!!!!!!

mysql 主鍵 外來鍵

1 候選鍵 關係中的乙個屬性組,其值能唯一標識乙個元組,若從該屬性組中去掉任何乙個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。比如人的自然屬性 身高,體重,年齡,指紋樣式.2 主鍵 當有多個候選碼時,可以選定乙個作為主碼,選定的候選碼稱主鍵。主鍵是能確定一條記錄的唯一標識 比如上面例子中的指...

mysql主鍵 外來鍵

主鍵是能確定一條記錄的唯一標識,主鍵字段必須唯一,必須非空,乙個表中只能有乙個主鍵,主鍵可以包含乙個或多個字段。打個比方,一條記錄包括身份正號,姓名,年齡,學校,國籍,性別等。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外...

mysql 加主鍵 MySQL新增主鍵和外來鍵

檢視表的字段資訊 desc 表名 檢視表的所有資訊 show create table 表名 新增主鍵約束 alter table 表名 add constraint 主鍵 形如 pk 表名 primary key 表名 主鍵字段 新增外來鍵約束 alter table 從表 add constra...