本教程面向零基礎開發者,21 分鐘帶你跑通 MySQL 安裝、庫表操作、核心 SQL、索引原理、常用優化五大模塊,建立完整知識骨架。
# Ubuntu/Debian sudo apt update && sudo apt install mysql-server -y # CentOS/RHEL sudo yum install mysql-server -y && sudo systemctl enable --now mysqld # 登錄 mysql -uroot -p
-- 庫
CREATE DATABASE shop CHARSET utf8mb4;
USE shop;
-- 表
CREATE TABLE users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 增
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- 刪
DELETE FROM users WHERE id = 1;
-- 改
UPDATE users SET name = 'Alice Smith' WHERE id = 2;
-- 查
SELECT * FROM users WHERE email LIKE '%@example.com';
-- 內連接 SELECT u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- 聚合 SELECT u.name, COUNT(o.id) AS order_cnt, SUM(o.amount) AS total FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id, u.name HAVING total > 1000; -- 子查詢 SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 500);
(a,b,c) 支援 a、a,b、a,b,c 三種前綴查詢。SELECT a,b FROM t WHERE c=1 若索引 (c,a,b) 存在,無需回表。ALTER TABLE users ADD INDEX idx_email (email);EXPLAIN SELECT * FROM users WHERE email = 'alice@example.com';
關鍵列:
| 列 | 優秀值 | 含義 |
|---|---|---|
| type | ref / eq_ref / range | 訪問類型,避免 ALL(全表掃) |
| key | idx_email | 實際用到的索引 |
| rows | 1 | 預估掃描行數 |
| Extra | Using index | 覆蓋索引/Using where/Using temporary |
SELECT * FROM logs ORDER BY id DESC LIMIT 100000, 20 深分頁慢 → 改 WHERE id < 100000 ORDER BY id DESC LIMIT 20(游標分頁)。slow_query_log=1, long_query_time=1,定期 pt-query-digest 分析 TOP 10。21 分鐘建立骨架,終身精進靠實戰。建議立即在本地跑通上述所有語句,肌肉記憶勝過十遍閱讀。