本文面向初學者,系統介紹關係型數據庫基本概念、MySQL 客戶端工具、核心 SQL 語法 (DDL/DML/DQL)、數據類型、權限管理與常用操作技巧,助您快速上手 MySQL 開發與管理。
| 工具 | 用途 |
| mysql | 命令列交互式客戶端,最常用 |
| mysqladmin | 管理操作:啟停、密碼、狀態、刷新 |
| mysqldump | 邏輯備份導出 SQL |
| mysqlimport | 文本數據批量導入 |
| MySQL Workbench | 官方 GUI:建模、SQL開發、管理、遷移 |
| Navicat / DBeaver / DataGrip | 第三方 GUI,功能豐富、跨平台 |
三、連接與會話管理
# 連接本地 (Socket)
mysql -u root -p
# 連接遠程 (TCP)
mysql -h 192.168.1.100 -u root -p
# 指定默認數據庫
mysql -u root -p db_name
# 執行單條 SQL 退出
mysql -u root -p -e "SELECT VERSION();"
# 從文件批量執行
mysql -u root -p db_name < script.sql
# 會話內命令
\q / quit / exit -- 退出
\c -- 取消當前多行輸入
\G -- 垂直顯示結果
SOURCE /path/file.sql -- 執行腳本文件
TEE /path/out.log -- 記錄輸出
NOTEE -- 停止記錄
STATUS / \s -- 顯示連接狀態
四、核心 SQL 語法速查
數據庫操作
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_name;
DROP DATABASE db_name;
SHOW DATABASES;
SELECT DATABASE();
表操作 (DDL)
-- 建表範例
CREATE TABLE president (
last_name VARCHAR(15) NOT NULL,
first_name VARCHAR(15) NOT NULL,
suffix VARCHAR(5),
city VARCHAR(20) NOT NULL,
state CHAR(2) NOT NULL,
birth DATE NOT NULL DEFAULT '0000-00-00',
death DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 判斷存在
CREATE TABLE IF NOT EXISTS tbl (...);
-- 複製結構
CREATE TABLE tbl2 LIKE tbl1;
CREATE TABLE tbl2 AS SELECT * FROM tbl1 WHERE 1=0;
-- 修改結構
ALTER TABLE tbl ADD COLUMN col_name TYPE;
ALTER TABLE tbl MODIFY col_name NEW_TYPE;
ALTER TABLE tbl CHANGE old_col new_col NEW_TYPE;
ALTER TABLE tbl DROP COLUMN col_name;
ALTER TABLE tbl RENAME TO new_tbl;
-- 刪表
DROP TABLE tbl;
數據操作 (DML)
-- 插入
INSERT INTO tbl (col1, col2) VALUES ('val1', 'val2');
INSERT INTO tbl VALUES ('val1', 'val2'), ('val3', 'val4'); -- 多行
INSERT INTO tbl SET col1='val1', col2='val2';
-- 更新
UPDATE tbl SET col1='new_val' WHERE id=1;
-- 刪除
DELETE FROM tbl WHERE id=1;
TRUNCATE TABLE tbl; -- 清空並重置自增,不可回滾
查詢 (DQL)
-- 基礎
SELECT col1, col2 FROM tbl WHERE condition;
SELECT * FROM tbl;
-- 條件與運算符
WHERE col = 'val'
WHERE col IN (1,2,3)
WHERE col BETWEEN 1 AND 100
WHERE col LIKE 'prefix%' -- 索引友好
WHERE col IS NULL / IS NOT NULL
-- 排序、分頁
ORDER BY col1 DESC, col2 ASC
LIMIT offset, count -- LIMIT 10, 20 (跳過10取20)
-- 聚合與分組
SELECT col1, COUNT(*), AVG(col2) FROM tbl GROUP BY col1 HAVING COUNT(*) > 5;
-- 多表關聯
SELECT a.col1, b.col2
FROM tbl_a a
INNER JOIN tbl_b b ON a.id = b.a_id
LEFT JOIN tbl_c c ON a.id = c.a_id;
-- 子查詢 / CTE (8.0+)
WITH cte AS (SELECT id FROM tbl WHERE status=1)
SELECT * FROM tbl WHERE id IN (SELECT id FROM cte);
常用函數
- 字串:
CONCAT(), SUBSTRING(), TRIM(), REPLACE(), LENGTH()
- 日期:
NOW(), CURDATE(), DATE_FORMAT(), DATEDIFF(), DATE_ADD()
- 數學:
ROUND(), FLOOR(), CEIL(), RAND()
- 流程控制:
IF(), CASE WHEN, COALESCE(), NULLIF()
- 聚合:
COUNT(), SUM(), AVG(), MAX(), MIN(), GROUP_CONCAT()
五、數據類型選擇指南
| 類別 | 類型 | 範圍/特點 | 建議場景 |
| 整數 | TINYINT | 1 字節 -128~127 | 布爾、狀態碼、極小範圍 |
| INT | 4 字節 ±21 億 | 主鍵、通用計數、ID (首選) |
| BIGINT | 8 字節 ±9 京 | 超大 ID、雪花算法、時間戳毫秒 |
| 小數 | DECIMAL(p,s) | 精確定點數,字串存儲 | 金額、價格、比率 (絕不丟精度) |
| FLOAT/DOUBLE | 浮點近似值 | 科學計算、坐標、不需精確場景 |
| 字串 | CHAR(n) | 定長,右補空格 | 固定長度代碼、MD5、UUID、國旗 |
| VARCHAR(n) | 變長,1-2 字節長度前綴 | 通用文本、名稱、描述 (最常用) |
| TEXT/MEDIUMTEXT/LONGTEXT | 大文本,溢出頁存儲 | 文章、日誌、JSON 文檔 |
| 日期時間 | DATE | 3 字節 1000-01-01 ~ 9999-12-31 | 生日、入職日期 |
| DATETIME | 8 字節 秒精度 | 創建/更新時間 (5.6+ 支援微秒) |
| TIMESTAMP | 4 字節 1970-2038,時區感知 | 自動更新時間戳、跨時區應用 |
| 枚舉/集合 | ENUM/SET | 內部存數值,極省空間 | 性別、狀態、固定字典值 |
六、權限管理基礎
-- 建用戶 + 授權 (8.0 語法)
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app'@'%';
FLUSH PRIVILEGES;
-- 查看權限
SHOW GRANTS FOR 'app'@'%';
-- 回收
REVOKE INSERT ON app_db.* FROM 'app'@'%';
-- 刪用戶
DROP USER 'app'@'%';
七、常用維護操作
# 備份
mysqldump -u root -p --single-transaction --routines --triggers db_name > backup.sql
# 還原
mysql -u root -p db_name < backup.sql
# 文本導入 (字段 Tab 分隔,NULL 用 \N)
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl FIELDS TERMINATED BY '\t';
# 修改密碼
mysqladmin -u root -p'old' password 'new'
# 或 SQL
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new';
# 查看進程
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
八、避坑指南
- 字符集統一用 utf8mb4:支援 Emoji,避免
utf8 (實為 utf8mb3) 截斷 4 字節字符。
- 主鍵用自增 BIGINT/INT:業務無關、單調遞增、最小空間、InnoDB 聚簇索引最優。
- NOT NULL 默認值:減少 NULL 判斷、節省位圖空間、利於優化器估算。
- 避免 SELECT *:明確列名,減少網絡傳輸、利用覆蓋索引、Schema 變更不影響應用。
- 大事務拆小:長事務阻塞 Purge、膨脹 Undo、鎖競爭、主從延遲。
- 定期 ANALYZE TABLE:更新統計資訊,優化器選擇正確索引。
MySQL 易上手、文檔豐富、社區活躍。掌握核心 SQL、數據類型、索引原理、事務隔離、鎖機制,再配合實戰項目練習,即可勝任初中級開發與運維工作。建議配合官方文檔 dev.mysql.com/doc 深入學習各專題。
- 上一篇文章: MySQL Cluster (NDB) 部署實戰:管理節點、數據節點與 SQL 節點配置全記錄
- 下一篇文章: MySQL 用戶賬號管理:GRANT 授權、密碼策略與最佳實踐
Copyright ©
程式碼之家 All Rights Reserved