SQL - 外鍵:建立表之間的關係
你好,有抱負的數據庫愛好者!今天,我們將踏上一段令人興奮的旅程,進入 SQL 外鍵的世界。作為你們友好的鄰居計算機老師,我將指導你們掌握這個形成關係數據庫支柱的重要概念。所以,拿起你的虛擬筆記本,我們一起來深入探討吧!
SQL 外鍵:串聯各點
想像一下你正在組織一個巨大的圖書館。你有一個書架放書,另一個書架放作者。如果你能將每本書與其作者联系起来,而不需要在每本書上寫上作者的详细信息,那該多好!這正是 SQL 外鍵的作用!
什麼是外鍵?
外鍵是一個表中的一列(或一組列),它引用了另一個表中的主鍵。它就像兩個表之間的橋樑,在它們之間建立了一種關係。
我們來看一個簡單的例子:
CREATE TABLE Authors (
AuthorID INT PRIMARY KEY,
AuthorName VARCHAR(100)
);
CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(200),
AuthorID INT,
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
在這個例子中,Books
表中的 AuthorID
是一個外鍵,它引用了 Authors
表中的 AuthorID
。這意味著每本書都與一位作者相關聯,但我們不需要為每本書重複所有作者的详细信息。
為什麼使用外鍵?
- 數據完整性:外鍵確保你不能添加一個不存在作者的書。
- 關係:它們允許你在表之間創建有意義的關係。
- 效率:你可以存儲一次數據並多次引用它,節省空間並減少冗余。
在已有列上添加外鍵約束
有時候,你可能想要在已有的列上添加一個外鍵約束。別擔心,SQL 會為你提供支持!以下是如何操作的:
ALTER TABLE Books
ADD CONSTRAINT FK_AuthorID
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID);
這條命令為 Books
表中已有的 AuthorID
列添加了一個外鍵約束。我們將我們的約束命名為 FK_AuthorID
- 給你的約束起有意義的名稱總是個好習慣。
一個警告
在將外鍵約束添加到已有列之前,請確保該列中的所有值在引用表中都有對應的值。否則,SQL 將會報錯!
刪除外鍵:分手並不困難
有時候,關係會變化,你可能需要移除一個外鍵約束。以下是如何操作的:
ALTER TABLE Books
DROP FOREIGN KEY FK_AuthorID;
這條命令移除了我們之前添加的外鍵約束。記住,這並不會刪除列或其數據 - 它只是移除了表之間的關係。
主鍵與外鍵:動態二人組
將主鍵和外鍵想像成數據庫世界中的動態二人組。它們各自有著自己的角色,但它們一起工作效果最佳。讓我們來分析一下:
主鍵
- 唯一地標識表中的每條記錄
- 必須包含唯一值,且不能包含 NULL 值
- 一個表只能有一個主鍵
外鍵
- 引用另一個表中的主鍵
- 可以包含重複值和 NULL 值
- 一個表可以有多個外鍵
以下是一個表總結它們的主要區別:
特點 | 主鍵 | 外鍵 |
---|---|---|
唯一性 | 必須唯一 | 可以有重複 |
NULL 值 | 不能為 NULL | 可以为 NULL |
表中的數量 | 只有一個 | 可以有多个 |
目的 | 标識其表中的記錄 | 引用另一個表中的記錄 |
讓我們通過一個更複雜的例子來看看它們是如何工作的:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(100),
Email VARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
CREATE TABLE OrderItems (
OrderItemID INT PRIMARY KEY,
OrderID INT,
ProductName VARCHAR(100),
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
在這個例子中,我們有三個表:
-
Customers
,其CustomerID
為主鍵 -
Orders
,其OrderID
為主鍵,CustomerID
為引用Customers
的外鍵 -
OrderItems
,其OrderItemID
為主鍵,OrderID
為引用Orders
的外鍵
這種結構使我們能夠追蹤哪個顧客下了哪些訂單,以及每個訂單中的哪些商品,而不需要不必要地重複顧客或訂單信息。
結論:將一切匯總
好了,各位!我們已經穿越了外鍵的土地,從它的創建到它的修改和刪除。我們看到了它們如何與主鍵手拉手地創建堅固、高效的數據庫結構。
記住,外鍵就像是數據庫社區中的友好鄰居 - 它們幫助表之間進行交流並協同工作。它們保證數據完整性,創建有意義的關係,並使你的數據庫運行順暢。
在你繼續你的 SQL 冒險時,請繼續實驗這些概念。嘗試創建你自己的表,添加一些外鍵約束,並看看它們如何影響你的數據操作。你實踐得越多,這些概念就越會變得自然。
祝編程愉快,願你的查詢總是返回你期望的結果!
Credits: Image by storyset