SQL - 主鍵:數據庫完整性的關鍵指南

你好,未來的數據庫魔法師們!我很興奮能成為你們在 SQL 主鍵世界中的導遊。作為一個教學超過十年的 SQL 老師,我可以向你們保證,理解主鍵就像找到一把完美的鑰匙,能夠解鎖數據庫管理的秘密。那麼,我們來一起深入了解一下吧!

SQL - Primary Key

什麼是主鍵?

在我們開始編寫代碼之前,讓我們先了解一下什麼是主鍵。想像你正在組織一個巨大的圖書館。你會如何確保每本書都有一個唯一識別符?這正是數據庫中的主鍵所做的事!

主鍵是一個表中的列(或列集合),用於唯一標識每一行。這就像給表中的每條記錄發一個獨特的身份證。這個身份證能夠幫我們快速找到和管理數據。

主鍵的關鍵特徵:

  1. 唯一性:沒有兩行可以具有相同的主鍵值。
  2. 非空:它不能包含 NULL 值。
  3. 不變性:一旦分配,它不應該更改。

SQL 主鍵的應用

讓我們從一個簡單的例子開始。想像我們正在為我們喜歡的書籍創建一個表:

CREATE TABLE favorite_books (
book_id INT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(50),
publication_year INT
);

在這個例子中,book_id 是我們的主鍵。它是一個整數,將唯一標識我們表中的每本書。

這為什麼很重要?

好吧,讓我們說我們想在數據庫中找到 "The Great Gatsby"。我們可以直接搜索整個 title 列,或者我們可以快速地使用其唯一的 book_id 定位它。這就像有一個超高效的圖書館目錄!

創建 SQL 主鍵

在 SQL 中創建主鍵有多種方法。讓我們來探討一下:

1. 在創建表時

我們在之前的例子中已經看到了這種方法。這裡再舉一個例子:

CREATE TABLE students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100)
);

在這個 students 表中,student_id 是我們的主鍵。這就像給每個學生發一個獨特的學校 ID!

2. 使用表約束

我們也可以將主鍵定義為表約束:

CREATE TABLE courses (
course_id INT,
course_name VARCHAR(100),
instructor VARCHAR(50),
CONSTRAINT pk_course PRIMARY KEY (course_id)
);

在這裡,我們告訴 SQL "嘿,讓 course_id 成為這個表的主鍵,並將這個約束稱為 pk_course"。

3. 複合主鍵

有時候,我們需要多個列來唯一標識一行。那時我們就使用複合主鍵:

CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrollment_date DATE,
PRIMARY KEY (student_id, course_id)
);

在這種情況下,student_idcourse_id 的組合形成我們的主鍵。這就像說,"一個學生只能報名一次課程,但他可以報名多個課程,而且一個課程可以有多个學生。"

在現有列上創建主鍵

哦!我們在創建表時忘記設置主鍵了嗎?沒關係!我們可以稍後添加:

ALTER TABLE employees
ADD PRIMARY KEY (employee_id);

這個命令將 employee_id 添加為我們現有的 employees 表的主鍵。這就像在我們的數據庫上增加一個新的組織系統!

刪除 SQL 主鍵

有時候,我們需要移除主鍵。也許我們意識到我們需要一個不同的列作為我們的主鍵,或者我們正在重構我們的數據庫。這是我們如何做到的:

ALTER TABLE products
DROP PRIMARY KEY;

這個命令從 products 表中移除主鍵。但請謹慎操作!這就像從你所有的產品中移除唯一識別符 - 確保你有重新識別它們的計劃!

主鍵最佳實踐

讓我分享一些我多年教學的智慧:

  1. 保持簡單:在可能的情况下,使用單一列作為主鍵。
  2. 使用自增值:讓數據庫處理唯一 ID 的生成。
  3. 避免使用真實世界數據:像電話號碼或電子郵件地址這樣的東西可以更改。

以下是一個使用自增主鍵的例子:

CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100)
);

在這種情況下,customer_id 將自動為每個新添加的客戶增加。這就像有一個售票機,為隊伍中的每個客戶提供一個新號碼!

結論

好了,各位!我們已經穿越了 SQL 主鍵的土地。從理解它們是什麼,到以不同的方式創建它們,再到修改和移除它們 - 你現在已經擁有了保護你數據庫完整性的知識。

記住,一個選擇得當的主鍵就像一個好房子的基礎 - 它支持著你將在其上建造的一切。所以請謹慎選擇,願你的數據庫永遠有組織且高效!

繼續練習,保持好奇心,在你意識到之前,你將成為 SQL 冒險中的主鍵大師!

以下是我们在本文中討論的主鍵操作的快速參考表:

操作 SQL 語法
創建時添加 CREATE TABLE table_name (column_name datatype PRIMARY KEY, ...);
作為表約束添加 CREATE TABLE table_name (..., CONSTRAINT constraint_name PRIMARY KEY (column_name));
創建複合主鍵 CREATE TABLE table_name (..., PRIMARY KEY (column1, column2));
添加到現有表 ALTER TABLE table_name ADD PRIMARY KEY (column_name);
刪除主鍵 ALTER TABLE table_name DROP PRIMARY KEY;

快樂的 SQL 編程!

Credits: Image by storyset