DBA 與開發日高頻的 MySQL 基礎操作速查,涵蓋庫表元數據查看、表結構變更、索引管理、數據遷移、常用函數實例,適合新手入門與老手查漏補缺。
-- 當前數據庫
SELECT DATABASE();
-- 顯示表
SHOW TABLES;
-- 表結構
DESC t1;
-- 索引信息
SHOW INDEX FROM t1;
-- 僅結構
CREATE TABLE t2 LIKE t1;
-- 結構 + 數據
INSERT INTO t2 SELECT * FROM t1;
-- 主鍵
ALTER TABLE t1 ADD PRIMARY KEY (id);
-- 唯一索引
ALTER TABLE t1 ADD UNIQUE INDEX uk_name (name);
-- 普通索引
ALTER TABLE t1 ADD INDEX idx_age (age);
-- 查看
SHOW INDEX FROM t1;
-- 刪除
ALTER TABLE t1 DROP PRIMARY KEY;
ALTER TABLE t1 DROP INDEX uk_name;
-- 修改列為自增主鍵
ALTER TABLE t1 MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
-- 重置自增值
ALTER TABLE t1 AUTO_INCREMENT = 1;
-- 刪除大 ID 後重置
DELETE FROM t1 WHERE id > 20;
ALTER TABLE t1 AUTO_INCREMENT = 1;
INSERT INTO t1 (name, age) VALUES
('aaa', 20), ('bbb', 30), ('cc', 18), ('abc', 23);
SELECT name, age FROM t1 INTO OUTFILE '/tmp/t1.txt';
-- 報錯 File exists 需先刪除文件

| 命令 | 原理 | 速度 | 自增重置 | 觸發器 | 回滾 |
|---|---|---|---|---|---|
DELETE FROM t1 | 逐行刪除,記錄 Binlog | 慢 | 否 | 觸發 | 可回滾 |
TRUNCATE TABLE t1 | Drop + Recreate 表,不記 Binlog | 極快 | 是(歸 1) | 不觸發 | 不可回滾 |
LOAD DATA INFILE '/tmp/t1.txt' INTO TABLE t1 (name, age);
-- 僅導入數據,不含表結構,速度極快
-- 文件內容:Tab 分隔裸數據

SELECT id, name, age,
CASE
WHEN age >= 30 THEN 'A'
WHEN age <= 18 THEN 'B'
ELSE 'C'
END AS grade
FROM t1;

| 函數 | 示例 | 結果 |
|---|---|---|
CONCAT(s1,s2...) | CONCAT('hello','mysql') | 'hellomysql' |
LCASE/UCASE(str) | UCASE('hello mysql') | 'HELLO MYSQL' |
LENGTH(str) | LENGTH('hello mysql') | 11(字節數) |
REPEAT(str,n) | REPEAT('hi,',3) | 'hi,hi,hi,' |
REPLACE(str,from,to) | REPLACE('hello mysql','mysql','php') | 'hello php' |
SUBSTRING(str,pos,len) | SUBSTRING('hello mysql',1,5) | 'hello'(位置從 1 開始) |
FIND_IN_SET(str,list) | FIND_IN_SET('a','a,b,c,d') | 1 |
| 函數 | 示例 | 結果 |
|---|---|---|
BIN(n) | BIN(2) | '10' |
CEILING(n) | CEILING(1.2) | 2 |
FLOOR(n) | FLOOR(1.2) | 1 |
MAX/MIN(expr) | SELECT MAX(age) FROM t1 | 聚合最大/小值 |
RAND() | RAND() | 0~1 隨機浮點數 |
| 函數 | 示例 | 結果 |
|---|---|---|
CURDATE() | CURDATE() | '2015-02-10' |
CURTIME() | CURTIME() | '02:43:08' |
NOW() | NOW() | '2015-02-10 02:43:15' |
UNIX_TIMESTAMP() | UNIX_TIMESTAMP() | 1423507660 |
FROM_UNIXTIME(ts) | FROM_UNIXTIME(UNIX_TIMESTAMP()) | '2015-02-10 02:49:37' |
YEAR/MONTH/DAY(date) | YEAR(NOW()) | 2015 / 2 / 10 |
基礎操作熟練度決定排障速度。建議將高頻 DDL/DML/函數做成代碼片段/別名,肌肉記憶級掌握。