主鍵(Primary Key)和外鍵(Foreign Key)是關系數據庫中用于定義和維護表之間關系的重要概念。以下是詳細的解釋、示例代碼和操作步驟。
主鍵(Primary Key)
定義
主鍵是表中的一個或多個字段,其值唯一地標識表中的每一行。主鍵的主要作用是確保表中的每一行具有唯一性,并且主鍵列不能包含 NULL 值。
特性
- 唯一性:主鍵中的值必須唯一。
- 非空性:主鍵列不能包含 NULL 值。
- 自動索引:在大多數數據庫系統中,主鍵會自動創建一個索引,以提高查詢速度。
示例
我們創建一個名為 users
的表,并將 id
列設置為主鍵:
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
執行示例:
mysql> CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.02 sec)
外鍵(Foreign Key)
定義
外鍵是一個或多個字段,其值在另一張表的主鍵或唯一鍵中存在。外鍵用于建立和維護兩個表之間的關系,確保數據的一致性和完整性。
特性
- 引用完整性:外鍵用于確保引用的行在另一張表中存在。
- 級聯操作:可以設置級聯刪除或更新,以確保在父表中修改或刪除數據時,子表中的數據同步更新或刪除。
示例
假設我們有一個 orders
表,其中 user_id
列是外鍵,引用 users
表中的 id
列。這表示每個訂單都與一個用戶相關聯。
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);
執行示例:
mysql> CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);
Query OK, 0 rows affected (0.02 sec)
操作示例
以下是一個完整的示例,包括創建數據庫、添加主鍵和外鍵以及插入數據的過程:
-- 連接到 MySQL 服務器
mysql -u root -p-- 創建數據庫
CREATE DATABASE mydatabase;-- 選擇數據庫
USE mydatabase;-- 創建 users 表并設置主鍵
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 創建 orders 表并設置外鍵
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);-- 插入數據到 users 表
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');-- 插入數據到 orders 表
INSERT INTO orders (user_id) VALUES (1);
INSERT INTO orders (user_id) VALUES (2);
使用圖形化工具管理主鍵和外鍵
使用 MySQL Workbench
-
創建主鍵:
- 打開 MySQL Workbench 并連接到 MySQL 服務器。
- 在左側的導航窗格中,右鍵點擊要修改的表(例如
users
),選擇 “Alter Table…”。 - 在彈出的窗口中,選擇要設置為主鍵的列(例如
id
),勾選 “PK”(Primary Key)復選框,然后點擊 “Apply”。
-
創建外鍵:
- 打開 MySQL Workbench 并連接到 MySQL 服務器。
- 在左側的導航窗格中,右鍵點擊要修改的表(例如
orders
),選擇 “Alter Table…”。 - 在彈出的窗口中,切換到 “Foreign Keys” 選項卡,點擊 “Add Foreign Key” 按鈕。
- 設置外鍵名稱,選擇引用的表和列(例如
users(id)
),然后點擊 “Apply”。
總結
主鍵和外鍵是關系型數據庫中用于確保數據完整性和一致性的重要機制。通過主鍵,可以唯一標識表中的每一行;通過外鍵,可以建立和維護表之間的關系。在實際操作中,可以通過 SQL 語句或圖形化工具來管理主鍵和外鍵。