MySQL - 複合鍵

Hello, 動手學習資料庫的熱心同好們!今天,我們將踏上一段令人興奮的旅程,進入 MySQL 複合鍵的世界。別擔心如果你是編程新手——我會一步一步地引導你了解這個概念,就像我這些年來為無數學生所做的一樣。所以,來一杯你喜歡的飲料,我們一起來深入探討吧!

MySQL - Composite Key

複合鍵是什麼?

在我們深入細節之前,讓我們先了解什麼是複合鍵。想像你正在組織一個龐大的圖書館。你可能認為單獨使用書名就足以識別一本書。但如果有兩本書有相同的書名呢?這就是複合鍵派上用場的地方!

複合鍵是由兩個或多個列組成的,它們共同唯一地識別表中的一行。這就像使用書名和作者名來確保你指的是你想要的確切書籍。

在 MySQL 中創建複合鍵

既然我們了解了複合鍵是什麼,讓我們學習如何在 MySQL 中創建一個。我們將使用一個簡單的 library 表來說明這個概念。

步驟 1:創建一個帶有複合鍵的表

CREATE TABLE library (
book_title VARCHAR(100),
author_name VARCHAR(50),
publish_year INT,
ISBN VARCHAR(13),
PRIMARY KEY (book_title, author_name)
);

在這個例子中,我們創建了一個名為 library 的表。複合鍵由 book_titleauthor_name 組成。這意味著我們可能有多本書有相同的書名或同一作者的書,但書名和作者的組合必須是唯一的。

步驟 2:插入數據

讓我們為我們的圖書館添加一些書籍:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '9780743273565'),
('To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789'),
('1984', 'George Orwell', 1949, '9780451524935'),
('Pride and Prejudice', 'Jane Austen', 1813, '9780141439518');

現在,如果我們嘗試插入一個重複條目:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 2000, '1234567890123');

MySQL 將會拋出一個錯誤,因為我們違反了複合鍵約束。'The Great Gatsby' 和 'F. Scott Fitzgerald' 的組合已經存在於我們的表中。

刪除 MySQL 複合鍵

有時候,你可能需要移除一個複合鍵。別擔心;這並不像聽起來那麼可怕!這就像決定以不同的方式重新組織你的圖書館一樣。

以下是如何刪除一個複合鍵的方法:

ALTER TABLE library
DROP PRIMARY KEY;

這個命令從我們的 library 表中移除了主鍵約束。但請謹慎!這意味著你不再有唯一標識符來識別你的行,這可能會導致重複條目。

使用客戶端程序操作複合鍵

現在,讓我們看看如何使用 MySQL 客戶端程序操作複合鍵。我將使用 MySQL 命令行客戶端作為例子,但這些概念也適用於其他客戶端程序。

  1. 首先,連接到你的 MySQL 伺服器:
mysql -u your_username -p
  1. 選擇你的數據庫:
USE your_database_name;
  1. 現在我們創建一個帶有複合鍵的新表:
CREATE TABLE students (
student_id INT,
course_id INT,
enrollment_date DATE,
grade FLOAT,
PRIMARY KEY (student_id, course_id)
);

在這個例子中,我們創建了一個 students 表,其中每行代表一個報名的學生。複合鍵由 student_idcourse_id 組成,確保一個學生不能在同一門課程中報名兩次。

  1. 讓我們插入一些數據:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES
(1, 101, '2023-09-01', 85.5),
(1, 102, '2023-09-01', 92.0),
(2, 101, '2023-09-01', 78.5),
(2, 103, '2023-09-02', 88.0);
  1. 現在我們嘗試插入一個重複條目:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES (1, 101, '2023-09-15', 90.0);

客戶端程序會顯示一個錯誤消息,因為我們違反了複合鍵約束。

結論

恭喜你!你剛剛踏出了進入 MySQL 複合鍵世界的第一步。記住,複合鍵就像數據庫世界的動力二重奏——它們共同工作,以保持你的數據唯一和有組織。

隨著你繼續在數據庫管理方面的旅程,你會發現複合鍵在維護數據完整性和建立表之間的關係方面非常有用。當單一列不足以唯一識別一行時,它們特別方便。

繼續練習,很快你就能像專家一樣創建和管理複合鍵!並記住,在數據庫世界中,正如在生活中一樣,有時兩個(或多個)比一個更好!

方法 描述
CREATE TABLE ... PRIMARY KEY (column1, column2) 創建一個帶有複合鍵的表
ALTER TABLE ... ADD PRIMARY KEY (column1, column2) 為現有表添加一個複合鍵
ALTER TABLE ... DROP PRIMARY KEY 從表中移除主鍵(複合或非複合)
INSERT INTO ... VALUES ... 插入數據,遵守複合鍵約束
SELECT ... WHERE column1 = value1 AND column2 = value2 使用複合鍵查詢數據

快樂編程,願你的數據庫總是有條不紊且效率高!

Credits: Image by storyset