今天要學習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 加速查詢/排序 無錯誤,但會增加空間負擔