iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0

今天要學習UNIQUE、CHECK、INDEX的語法跟使用情境

1.UNIQUE(name):避免重複學生(同名視為同一人)
語法:

CREATE TABLE Students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT UNIQUE,     -- 不允許重複名字
    age INTEGER
);

UNIQUE 代表欄位的值必須唯一。

如果你嘗試插入一個相同 name 的學生,會報錯:

Error: UNIQUE constraint failed: Students.name

可應用在一個或多個欄位上:

UNIQUE(name, age)

👉 表示「同名同年齡」才視為重複。

2.CHECK(age):檢查年齡合理(1–120)
語法:

CREATE TABLE Students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT UNIQUE,
    age INTEGER CHECK(age BETWEEN 1 AND 120)
);

或在既有表格上新增:

ALTER TABLE Students
ADD CONSTRAINT check_age CHECK(age >= 1 AND age <= 120);

CHECK 會在每次 INSERT 或 UPDATE 時驗證條件是否成立。

若輸入 age = 0 或 age = 200,會報錯:

Error: CHECK constraint failed: Students

可搭配多條件:

CHECK(age BETWEEN 1 AND 120 AND name IS NOT NULL)

3.INDEX(name):加快搜尋/排序速度
語法:
CREATE INDEX idx_name
ON Students(name);

刪除索引:

DROP INDEX idx_name;

INDEX 是資料庫的「快速查找表」,可提升搜尋速度。

適用於常被用在 WHERE、ORDER BY 的欄位:

SELECT * FROM Students WHERE name = 'Kevin';

→ 若 name 有索引,搜尋會更快。

但索引會佔空間;
插入、更新、刪除時會變慢,因為索引也要被更新。

命名慣例常為 idx_欄位名。

一個統整的部分:
功能關鍵字 用途 錯誤觸發情況
唯一性 UNIQUE 避免重複資料 插入重複值
合法檢查 CHECK 驗證資料範圍或條件 條件不成立
查找加速 INDEX 加速查詢/排序 無錯誤,但會增加空間負擔


上一篇
Day 27: JUnit 安裝,更改成:database 知識補足
系列文
Java 學生管理系統:打造可新增、刪除、修改、搜尋並保存資料的完整 CLI 應用28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言