MySQL 學習第 13 天筆記,系統梳理 SQL 標準與方言、SQL 語言四大分類 (DDL/DML/DQL/TCL/DCL)、資料庫/表結構操作、資料增刪改查、完整性約束 (域/實體/参照)、字符集設定、自增主鍵、外鍵關聯等核心知識,附完整命令列實操記錄。
AUTO_INCREMENT、LIMIT、REPLACE INTO)| 類別 | 全稱 | 關鍵字 | 作用 |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE | 定義庫/表結構 |
| DML | Data Manipulation Language | INSERT, UPDATE, DELETE | 操作資料 |
| DQL | Data Query Language | SELECT | 查詢資料 |
| TPL/TCL | Transaction Process/Control Language | COMMIT, ROLLBACK, SAVEPOINT | 事務控制 |
| DCL | Data Control Language | GRANT, REVOKE | 權限控制 |
| CCL | Cursor Control Language | DECLARE, OPEN, FETCH, CLOSE | 游標控制 |
| 場景 | SQL | 關鍵字 |
|---|---|---|
| 投影查詢 | SELECT NAME, ENGLISH FROM STUDENT; | |
| 去重 | SELECT DISTINCT ENGLISH FROM STUDENT; | DISTINCT |
| 運算列 | SELECT NAME, MATH+10 FROM STUDENT; | |
| 統計總分 | SELECT NAME, CHINESE+ENGLISH+MATH FROM STUDENT; | |
| 別名 | SELECT NAME AS 姓名, CHINESE+ENGLISH+MATH AS 總分 FROM STUDENT; | AS |
| 條件查詢 | SELECT * FROM STUDENT WHERE NAME='王五'; | WHERE |
| 範圍 | SELECT * FROM STUDENT WHERE ENGLISH > 90; | |
| 複合條件 | SELECT * FROM STUDENT WHERE (CHINESE+ENGLISH+MATH) > 200; | |
| 模糊查詢 | SELECT * FROM STUDENT WHERE NAME LIKE '李%'; | LIKE, % _ |
| BETWEEN | SELECT NAME, ENGLISH FROM STUDENT WHERE ENGLISH BETWEEN 80 AND 90; | BETWEEN ... AND |
| IN 集合 | SELECT NAME, MATH FROM STUDENT WHERE MATH IN (89,90,91); | IN |
| AND/OR | SELECT * FROM STUDENT WHERE MATH>80 AND CHINESE>80; | AND/OR |
| 排序 | SELECT NAME, MATH FROM STUDENT ORDER BY MATH; | ORDER BY ... ASC/DESC |
| 分頁 | SELECT * FROM STUDENT LIMIT 0,3; | LIMIT offset, count |
注意: ORDER BY 後可用非 SELECT 列,關鍵字作識別符需反引號 \`order\`。
NOT NULL:非空,空字串 '' 允許,NULL 不允許UNIQUE:唯一,允許多 NULL,有值則唯一CHECK:條件約束 (MySQL 8.0.16+ 強制)PRIMARY KEY:主鍵,非空+唯一,一表一個AUTO_INCREMENT:自增 (MySQL 方言),Oracle 用 SequenceID INT PRIMARY KEY AUTO_INCREMENTFOREIGN KEY:外鍵,維護主從表引用關係
mysql> INSERT INTO USER VALUES (3,'查顯成','男性','1988-09-08','2014-02-17','UFO',100000,'帥鍋');
ERROR 1366 (HY000): Incorrect string value: '\xB2\xE9\xCF\xD4\xB3\xC9' for column 'username' at row 1
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------+
mysql> SET CHARACTER_SET_CLIENT = gbk;
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO USER VALUES (3,'湯柳清','男性','1988-09-08','2014-02-17','UFO',100000,'帥鍋');
Query OK, 1 row affected (0.02 sec)
教訓: 客戶端編碼 (character_set_client) 必須與輸入資料編碼一致,否則中文寫入亂碼。生產環境統一配置 utf8mb4 端到端。
| 英文 | 中文 | 備註 |
|---|---|---|
| remote | 遠程 | |
| collation | 校對規則/排序規則 | 決定比較/排序行為 |
| charset | 字符集 | |
| manipulation | 操作/控制 | DML |
| timestamp | 時間戳 | 不賦值自動取當前時間 |
| engine | 儲存引擎 | InnoDB 支援事務 |
這份筆記涵蓋 MySQL 入門必會的 90% 核心操作,建議在本地環境逐條敲擊執行,建立肌肉記憶,為進階優化與架構設計打牢基礎。