當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


MySQL Foreign keys用法及代碼示例

MySQL 中的外鍵是指一個表中的一列(或一組列),該列引用另一個表中的主鍵。包含外鍵的表稱為子表,而包含所引用的主鍵的表稱為父表.

父子表

讓我們用一個簡單的例子來說明父表和子表的概念。請考慮以下兩個表格,其中包含有關學生及其各自老師的一些信息:

pupil 表:

ID

名字

1

axel

2

bobby

3

cathy

請參閱此處生成 pupil 表的代碼。

teacher 表:

teacher_id

teacher_name

pupil_id

部門

1

emily

1

physics

2

fiona

2

physics

3

gilbert

3

chemistry

請參閱此處生成 teacher 表的代碼。

  • 檢查每個表的代碼,您將看到teacher表的pupil_id字段引用pupil表的id字段。

  • 因此在這個例子中pupil表是家長表和teacher表是孩子表格。

外鍵的重要性

每當一個表引用另一個表時,使用外鍵幾乎總是一個好主意。讓我們用一個簡單的例子來理解為什麽。

讓我們再次使用相同的表:

pupil(父表)

ID

名字

1

axel

2

bobby

3

cathy

teacher(子表)

teacher_id

teacher_name

pupil_id

部門

1

emily

1

physics

2

fiona

2

physics

3

gilbert

3

chemistry

假設我們添加一位新老師來監督一名新學生pupil_id=4

teacher(子表)

teacher_id

teacher_name

pupil_id

部門

1

emily

1

physics

2

fiona

2

physics

3

gilbert

3

chemistry

4

helen

4

physics

您能看到我們目前的數據不一致嗎?我們有一位老師所監管的學生不存在於我們的 pupil 表中(即 pupil 表中沒有 id=4 的學生)。

注意

外鍵是防止我們的數據出現這些不一致的約束。換句話說,有了外鍵,我們將無法添加Helen記錄,因為MySQL知道pupil_id=4pupilid字段中沒有相應的匹配項。表格。

為了證明這一點,讓我們嘗試將老師 Helen 插入到我們的 teacher 表中,他將用 pupil_id = 4 來監督新學生:

INSERT INTO teacher(teacher_name, pupil_id) 
VALUES ('helen', 4);



ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails.

太好了,外鍵對於防止數據庫中的不一致很有用!

從父表中刪除

可能發生不一致的另一種情況是刪除父表中的記錄。例如,假設我們嘗試從 pupil 表中刪除 id=2 的學生:

DELETE FROM pupil 
WHERE id = 2;

這將導致錯誤,因為子表包含帶有 pupil_id=2 的記錄,如果刪除 bobby (即 id=2 ),則父表中將不再有匹配的記錄。

瞳孔(父表)

ID

名字

1

axel

2

bobby

3

cathy

老師 (子表)

teacher_id

teacher_name

pupil_id

部門

1

emily

1

physics

2

fiona

2

physics

3

gilbert

3

chemistry

此外,當我們也更新父表時,可能會出現同樣的不一致:

UPDATE pupil 
SET id = 3 
WHERE id = 2;

當我們使用外鍵時,所有這些不一致的情況都可以避免。因此,建議使用它!

默認情況下,外鍵沒有任何限製,它可以采用 NULL 以及重複值。

相關用法


注:本文由純淨天空篩選整理自Arthur Yanagisawa大神的英文原創作品 MySQL | Foreign keys。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。