本文系統梳理關係型數據庫核心概念、E-R 建模方法論、約束體系、常用 SQL 語法與字符集配置,適合入門學習與面試複習。
E-R 圖標準符號:
| 約束類型 | 關鍵字 | 作用 | 示例 |
|---|---|---|---|
| 主鍵約束 | PRIMARY KEY | 唯一標識,非空,單表僅一個 | id INT PRIMARY KEY AUTO_INCREMENT |
| 外鍵約束 | FOREIGN KEY | 引用父表主鍵/唯一鍵,維護引用完整性 | FOREIGN KEY (dept_id) REFERENCES dept(id) |
| 唯一約束 | UNIQUE | 列值唯一,允許多個 NULL | email VARCHAR(100) UNIQUE |
| 非空約束 | NOT NULL | 禁止 NULL 值 | name VARCHAR(50) NOT NULL |
| 檢查約束 | CHECK | 值滿足條件表達式(8.0.16+ 支援) | age INT CHECK (age >= 0 AND age <= 150) |
| 默認約束 | DEFAULT | 未指定值時使用默認值 | status TINYINT DEFAULT 1 |
| 類別 | 常用類型 | 存儲/範圍 | 適用場景 |
|---|---|---|---|
| 數值 | TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT | 1/2/3/4/8 字節 | 整數 ID、計數器、狀態碼 |
| 小數 | DECIMAL(p,s) / FLOAT / DOUBLE | 精確/近似 | 金額用 DECIMAL,科學計算用 DOUBLE |
| 字符串 | VARCHAR(n) / CHAR(n) / TEXT / LONGTEXT | 變長/定長/大文本 | VARCHAR 通用,CHAR 定長短碼 |
| 日期時間 | DATE / TIME / DATETIME / TIMESTAMP | 3/3/8/4 字節 | DATETIME 8.0+ 無時區,TIMESTAMP 有时區轉換 |
| 二進制 | BLOB / VARBINARY | 字節流 | 圖片、文件、序列化對象 |
INSERT INTO `tbl` (`col1`, `col2`) VALUES ('val1', 'val2');
INSERT INTO `tbl` (`col1`, `col2`) VALUES ('a',1), ('b',2), ('c',3); -- 批量
INSERT INTO `tbl` SELECT ... FROM `other_tbl`; -- 查詢結果插入
UPDATE `tbl` SET `col1` = 'new_val' WHERE `id` = 1;
UPDATE `tbl` SET `score` = `score` + 10 WHERE `class_id` = 2;
DELETE FROM `tbl` WHERE `id` = 1;
TRUNCATE TABLE `tbl`; -- 快速清空,不可回滾,重置自增 ID
SELECT `col1`, `col2` FROM `tbl`
WHERE `status` = 1 AND `created_at` > '2023-01-01'
GROUP BY `category`
HAVING COUNT(*) > 5
ORDER BY `score` DESC, `id` ASC
LIMIT 10 OFFSET 20; -- 分頁
COUNT(*) / COUNT(DISTINCT col) -- 行數 / 去重計數
SUM(col) / AVG(col) -- 求和 / 平均
MAX(col) / MIN(col) -- 最大 / 最小
GROUP_CONCAT(col SEPARATOR ',') -- 分組拼接
單引號:\'、雙引號:\"、反斜杠:\\、百分號:\%、下劃線:\_(LIKE 模糊查詢中)
CREATE INDEX idx_name ON tbl(col); 或建表時 KEY idx_name (col)ALTER TABLE tbl MODIFY col VARCHAR(200);CREATE VIEW v AS SELECT ...掌握基礎操作是進階優化與架構設計的前提,建議動手構建完整練習項目鞏固知識體系。