本教程基於 MySQL 5.6 官方文檔核心章節,結合實操演示,帶領零基礎讀者快速掌握 MySQL 連接、查詢、庫表創建、數據導入、檢索、批處理、常用查詢模式及 Apache 整合。所有代碼均經實測可直接運行。
標準連接命令:
mysql -h host -u user -p # 輸入密碼後進入 mysql> 提示符
本地連接可省略 -h:
mysql -u root -p
斷開連接:
mysql> QUIT # 或 EXIT、Ctrl+D
MySQL 以分號 ; 判斷語句結束,支援多行輸入:
mysql> SELECT VERSION(), CURRENT_DATE; +------------+--------------+ | VERSION() | CURRENT_DATE | +------------+--------------+ | 5.6.21-log | 2014-10-14 | +------------+--------------+
可作計算器用:
mysql> SELECT SIN(PI()/4), (3+2)*5;
單行多語句:
mysql> SELECT VERSION(); SELECT NOW();
取消當前輸入:輸入 \c。
提示符含義:
| 提示符 | 含義 |
|---|---|
mysql> | 就緒接受新命令 |
-> | 等待多行語句下一行 |
'> / "> | 字符串未閉合(單/雙引號) |
`> | 標識符未閉合(反引號) |
/*> | 註釋未閉合 |
遇到 '> 或 "> 時,補全引號再輸入 \c 取消。
mysql> SHOW DATABASES; mysql> CREATE DATABASE menagerie; mysql> USE menagerie Database changed
注意: Unix 下庫表名區分大小寫,建議統一小寫。
mysql> CREATE TABLE pet (
name VARCHAR(20),
owner VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE
);
mysql> DESCRIBE pet; -- 查看表結構
方式一:LOAD DATA(批量高效)
準備 pet.txt(Tab 分隔,NULL 用 \N):
Fluffy Harold cat f 1993-02-04 \N Claws Gwen cat m 1994-03-17 \N Buffy Harold dog f 1989-05-13 \N Fang Benny dog m 1990-08-27 \N Bowser Diane dog m 1979-08-31 1995-07-29 Chirpy Gwen bird f 1998-09-11 \N Whistler Gwen bird \N 1997-12-09 \N Slim Benny snake m 1996-04-29 \N
導入:
mysql> LOAD DATA LOCAL INFILE '/home/user/pet.txt' INTO TABLE pet;
方式二:INSERT(單條插入)
mysql> INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
選擇所有: SELECT * FROM pet;
修正數據: UPDATE pet SET birth='1989-08-31' WHERE name='Bowser';
條件查詢:
SELECT * FROM pet WHERE name='Bowser'; SELECT * FROM pet WHERE birth >= '1998-1-1'; SELECT * FROM pet WHERE species='dog' AND sex='f'; SELECT * FROM pet WHERE species='snake' OR species='bird';
選擇特定列:
SELECT name, birth FROM pet; SELECT DISTINCT owner FROM pet;
排序:
SELECT name, birth FROM pet ORDER BY birth; SELECT name, birth FROM pet ORDER BY birth DESC; SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
日期計算:
SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR, birth, CURDATE()) AS age
FROM pet ORDER BY age;
處理 NULL: 必須用 IS NULL/IS NOT NULL,不能用 = NULL。
模式匹配:
SELECT * FROM pet WHERE name LIKE 'b%'; -- 以 b 開頭 SELECT * FROM pet WHERE name LIKE '%fy'; -- 以 fy 結尾 SELECT * FROM pet WHERE name LIKE '%w%'; -- 包含 w SELECT * FROM pet WHERE name LIKE '_____'; -- 5 字符 SELECT * FROM pet WHERE name REGEXP '^b'; -- 正則:以 b 開頭
統計計數:
SELECT COUNT(*) FROM pet; SELECT owner, COUNT(*) FROM pet GROUP BY owner; SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
多表關聯(自關聯):
CREATE TABLE event (name VARCHAR(20), date DATE, type VARCHAR(15), remark VARCHAR(255)); -- 導入 event.txt 後 SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species FROM pet AS p1 INNER JOIN pet AS p2 ON p1.species = p2.species AND p1.sex='f' AND p2.sex='m'; -- 找配對
SHOW DATABASES; SELECT DATABASE(); -- 當前庫 SHOW TABLES; DESCRIBE pet; -- 表結構 SHOW CREATE TABLE pet; -- 建表語句
將 SQL 寫入文件 batch.sql:
SHOW DATABASES; SELECT DATABASE(); USE menagerie; SHOW TABLES; SELECT DISTINCT species FROM pet;
執行:
mysql -u root -p < batch.sql # 格式化輸出加 -t,顯示執行語句加 -vvv
使用 shop 表(article, dealer, price,主鍵 article+dealer)。
SELECT MAX(article) AS article FROM shop;
SELECT article, dealer, price FROM shop WHERE price = (SELECT MAX(price) FROM shop); -- 或 LEFT JOIN / LIMIT 1
SELECT article, MAX(price) AS price FROM shop GROUP BY article;
SELECT article, dealer, price FROM shop s1 WHERE price = (SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article); -- 或 JOIN 子查詢 / LEFT JOIN
SELECT @min:=MIN(price), @max:=MAX(price) FROM shop; SELECT * FROM shop WHERE price=@min OR price=@max;
InnoDB 支持外鍵,語法:
CREATE TABLE shirt (
id INT AUTO_INCREMENT PRIMARY KEY,
style ENUM('t-shirt','polo','dress') NOT NULL,
color ENUM('red','blue','orange','white','black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
) ENGINE=InnoDB;
注意: MySQL REFERENCES 不檢查引用表是否存在、不觸發級聯動作、不創建索引,僅作為列屬性存在。
將 Apache 日誌格式調整為 CSV,便於 LOAD DATA 導入 MySQL 分析:
LogFormat "\"%h\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\",\"%U\",\"%{Referer}i\",\"%{User-Agent}i\""
導入:
LOAD DATA INFILE '/local/access_log' INTO TABLE tbl_name FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\';
mysql 客戶端交互與批處理。Data Types、Functions、Storage Engines 章節。MySQL 入門核心在於:連接認證 → 庫表對象管理 → 數據導入導出 → 查詢檢索技巧 → 批處理自動化 → 常見模式積累 → 系統整合。本教程提供了可直接運行的完整代碼示例,建議在測試環境逐行敲擊練習,構建肌肉記憶,奠定扎實基礎。