整理 MySQL 核心 SQL 分類與常用語法,涵蓋數據定義 (DDL)、數據操縱 (DML)、數據控制 (DCL)、進階查詢、視圖、元數據等,適合開發與面試快速查閱。
CREATE DATABASE db_name;
DROP DATABASE db_name;
-- 建表
CREATE TABLE tbl_name (
id INT(5) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
-- 刪表
DROP TABLE tbl_name;
-- 修改表
ALTER TABLE tbl_name RENAME new_tbl_name; -- 改表名
ALTER TABLE tbl_name MODIFY name VARCHAR(10); -- 改欄位屬性
ALTER TABLE tbl_name ADD col_name VARCHAR(20) FIRST; -- 加欄位(首位)
ALTER TABLE tbl_name ADD col_name VARCHAR(20) AFTER name; -- 加欄位(指定後)
ALTER TABLE tbl_name DROP col_name; -- 刪欄位
ALTER TABLE tbl_name CHANGE old_name new_name VARCHAR(20); -- 改欄位名
CHANGE vs MODIFY:CHANGE 可改名(需寫兩次名),MODIFY 僅改屬性。
-- 增
INSERT INTO tbl_name (col1, col2) VALUES (val1, val2);
-- 刪
DELETE FROM tbl_name [WHERE condition];
-- 查
SELECT * FROM tbl_name;
-- 改
UPDATE tbl_name SET col_name = 'val' WHERE id = 1;
SELECT dept, COUNT(*)
FROM tbl_name
GROUP BY dept
HAVING COUNT(*) >= 2;
SELECT *
FROM tbl_name
WHERE col_name = 'abc'
LIMIT 0, 2 -- 從第 0 條起取 2 條
ORDER BY col_name DESC;
SELECT *
FROM tbl_name
WHERE dept IN (
SELECT dept FROM tbl_name_1
);
-- 子查詢單值時可用 = 代替 IN
SELECT dept FROM tbl_name
UNION -- 去重
SELECT dept FROM tbl_name_2;
SELECT dept FROM tbl_name
UNION ALL -- 不去重,效能更好
SELECT dept FROM tbl_name_2;
CREATE VIEW view_name AS SELECT ...;
SELECT * FROM view_name;
DROP VIEW view_name;
CREATE OR REPLACE VIEW view_name AS SELECT ...; -- 存在則替換
SELECT dept, COUNT(*) FROM tbl_name GROUP BY dept WITH ROLLUP;
-- 最後一行顯示總計
| 對比項 | 差異說明 |
|---|---|
| WHERE vs HAVING | WHERE 聚合前過濾,HAVING 聚合後過濾。能用 WHERE 優先用(可用索引) |
| UNION vs UNION ALL | UNION = UNION ALL + DISTINCT 去重。無去重需求必用 UNION ALL |
| IN vs = | 子查詢返回單值可用 =,多值必用 IN |
-- 授權
GRANT SELECT, INSERT ON tbl_name.* TO 'user'@'host' IDENTIFIED BY 'pass';
-- 回收
REVOKE INSERT ON tbl_name.* FROM 'user'@'host';
虛擬庫,無物理文件,全部為視圖。
| 視圖名 | 內容 |
|---|---|
| SCHEMATA | 所有數據庫信息 |
| TABLES | 表信息 |
| COLUMNS | 欄位信息 |
| STATISTICS | 索引信息 |
| VIEWS | 視圖信息 |
| ROUTINES | 存儲過程/函數 |
| TRIGGERS | 觸發器 |
| USER_PRIVILEGES | 用戶權限 |
-- 查所有表
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbname';
-- 查表結構
SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'tbl_name';
-- 查索引
SELECT * FROM information_schema.STATISTICS WHERE TABLE_NAME = 'tbl_name';
建議收藏此手冊,開發時快速查閱語法細節,減少翻文檔時間。