核心認知:事務由存儲引擎實現,服務層不管理事務;InnoDB 死檢測策略為回滾持有最少行鎖的事務。
mysql -h host -u user -p
USE db;
SHOW DATABASES/TABLES/COLUMNS FROM tbl;
SHOW CREATE TABLE tbl;
SHOW STATUS/VARIABLES;
SELECT col1, col2 FROM tbl;
SELECT DISTINCT col FROM tbl;
SELECT * FROM tbl ORDER BY id DESC LIMIT 10;
SELECT * FROM tbl ORDER BY id DESC, name ASC LIMIT 5, 10; -- 多列排序
| 操作符 | 說明 |
|---|---|
| =, <>, != | 等於、不等於 |
| <, >, <=, >= | 比較 |
| BETWEEN ... AND ... | 範圍(含邊界) |
| IS NULL / IS NOT NULL | 空值判斷 |
| IN (v1, v2...) | 集合匹配 |
| LIKE '%abc%' / '_abc' | 通配符:% 任意長度,_ 單字符 |
| REGEXP 'pattern' | 正則表達式(匹配子串) |
邏輯組合:AND 優先於 OR,用括號改變優先級。
SELECT COUNT(*), AVG(score), MAX(age), MIN(age), SUM(salary) FROM tbl;
SELECT COUNT(DISTINCT dept) FROM tbl;
SELECT dept, AVG(salary) FROM emp GROUP BY dept HAVING AVG(salary) > 5000;
WHERE 行級過濾(分組前)HAVING 組級過濾(分組後)GROUP BY 列必須出現在 SELECT 列表或為聚合函數參數SELECT * FROM tbl WHERE id IN (SELECT pid FROM other_tbl WHERE status=1);
注意:子查詢返回列數需與外層匹配,通常為單列。
SELECT v.name, p.name, p.price
FROM vendors v INNER JOIN products p ON v.vend_id = p.vend_id;
-- 左外聯結:保留左表所有行
SELECT c.cust_id, o.order_num
FROM customers c LEFT OUTER JOIN orders o ON c.cust_id = o.cust_id;
SELECT p1.prod_id, p1.prod_name
FROM products p1, products p2
WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';
(SELECT col FROM tbl1 WHERE cond1)
UNION
(SELECT col FROM tbl2 WHERE cond2)
ORDER BY col;
UNION ALL 保留重複ORDER BY 僅允許最後一條 SELECT 後
-- 插入
INSERT INTO tbl (a,b) VALUES (1,2), (3,4);
INSERT INTO tbl SELECT * FROM other_tbl;
-- 更新/刪除(必帶 WHERE)
UPDATE tbl SET a=10 WHERE id=1;
DELETE FROM tbl WHERE id=1;
CREATE TABLE vendors (
vend_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
vend_name CHAR(50) NOT NULL,
vend_address CHAR(50) NULL DEFAULT '*'
) ENGINE=InnoDB;
ALTER TABLE tbl ADD COLUMN c INT;
ALTER TABLE tbl DROP COLUMN c;
ALTER TABLE tbl MODIFY c VARCHAR(20) NOT NULL;
DROP TABLE tbl;
RENAME TABLE old TO new;
引擎選擇:InnoDB(事務、行鎖)、MyISAM(全文、讀多寫少)、Memory(臨時表、極速)。
CREATE VIEW v AS SELECT id, name FROM tbl WHERE status=1;
SHOW CREATE VIEW v;
DROP VIEW v;
視圖本質是封裝的 SELECT,簡化複雜查詢、安全隔離、格式轉換。包含聚合、聯結、子查詢、DISTINCT 的視圖不可更新。