mysql
MySQL 8.0+MySQL/MariaDB 快速參考:客戶端指令、DDL/DML 陳述式、join/彙總、索引、交易與備份/還原——附常用參數與實作範例。
38 條命令
連線
mysql -h <host> -P <port> -u <user> -p <db>開啟互動式 MySQL 用戶端工作階段。
-h 主機;-P 預設 3306;-u 使用者;-p 密碼;-D 資料庫;-e 命令;-f 強制繼續;--safe-updates
mysql -h mysql.internal -u app -p app_productionmysql -u root -p -e "SHOW DATABASES;"在 shell 中直接執行一條或多條 SQL,不必進入 REPL。
--tee 檔案 擷取輸出;--html HTML 格式;--table Tab 分隔
mysql -u root -p -e "SHOW SLAVE STATUS\G"中繼資料與資訊
SHOW DATABASES列出使用者可見的所有資料庫。
SHOW SCHEMAS 為同義詞
SHOW DATABASES LIKE 'app%';SHOW TABLES / DESCRIBE列出當前資料庫的資料表;DESCRIBE 顯示單一資料表的欄位。
SHOW FULL TABLES;DESCRIBE t;SHOW COLUMNS FROM t
SHOW FULL TABLES WHERE Table_type != 'BASE TABLE';SHOW CREATE TABLE <t>輸出能重建該資料表的完整 SQL——遷移時很好用。
SHOW CREATE TABLE orders\GEXPLAIN <statement>顯示查詢計畫與索引使用情況。可加上 FORMAT=JSON 供工具讀取。
EXPLAIN FORMAT=JSON;EXPLAIN ANALYZE(MySQL 8.0+)會實際執行;EXTENDED/traditional 已棄用
EXPLAIN SELECT * FROM orders WHERE user_id = 42 ORDER BY created_at DESC LIMIT 10;SHOW STATUS / SHOW VARIABLES檢視伺服器的健康計數器與可調參數。
SHOW GLOBAL STATUS LIKE 'Threads_running';SHOW VARIABLES LIKE 'innodb_buffer_pool_size%';
SHOW GLOBAL STATUS LIKE 'Slow_queries';資料庫與 Schema
CREATE DATABASE <db>建立新資料庫,可選擇字元集與定序。
CHARACTER SET utf8mb4;COLLATE utf8mb4_0900_ai_ci;ENCRYPTION 'Y'(8.0.16+)
CREATE DATABASE app_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;USE <db> / DROP DATABASE <db>切換預設資料庫,或刪除既有資料庫。
USE 會清空上次結果並設定 DB;DROP DATABASE 無法復原
DROP DATABASE IF EXISTS app_old;資料表與 DDL
CREATE TABLE定義新資料表——欄位、鍵、預設值與儲存引擎選項。
ENGINE=InnoDB;DEFAULT CHARSET=utf8mb4;AUTO_INCREMENT=<n>;KEY/UNIQUE/PRIMARY KEY 約束
CREATE TABLE orders ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id INT UNSIGNED NOT NULL, total DECIMAL(10,2) NOT NULL DEFAULT 0, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY idx_user_created (user_id, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;ALTER TABLE新增/重新命名/刪除欄位與索引,更換引擎,設定選項。
ADD COLUMN;DROP COLUMN;MODIFY/ALTER COLUMN;ADD/DROP INDEX;RENAME;ORDER BY;ALGORITHM=INSTANT|INPLACE|COPY
ALTER TABLE orders ADD COLUMN status ENUM('pending','paid','cancelled') NOT NULL DEFAULT 'pending', ADD INDEX idx_status (status);DROP TABLE / TRUNCATE TABLE刪除資料表(CASCADE 為可選)或快速清空(會重置 AUTO_INCREMENT)。
DROP TABLE IF EXISTS;TRUNCATE TABLE;可暫時設 FOREIGN_KEY_CHECKS=0 跨表操作
TRUNCATE TABLE staging.events;RENAME TABLE <a> TO <b>原子重新命名——搭配影子表做熱切換很順手。
RENAME TABLE orders TO orders_old, orders_new TO orders;DML
INSERT INTO <t> [(cols)] VALUES ...插入一筆或多筆資料;多筆 INSERT 比逐筆 INSERT 快。
INSERT IGNORE;ON DUPLICATE KEY UPDATE(upsert);INSERT ... SELECT;LAST_INSERT_ID()
INSERT INTO orders(user_id, total) VALUES (1, 9.99), (1, 4.50), (2, 19.95);INSERT ... ON DUPLICATE KEY UPDATEUpsert——當唯一/主鍵衝突時改為更新;影響列數會回傳 2。
VALUES(col) 取舊/新值;LAST_INSERT_ID() 技巧串接 auto-increment
INSERT INTO counters(id, hits) VALUES (1, 1) ON DUPLICATE KEY UPDATE hits = hits + 1REPLACE INTO ...唯一鍵衝突時等同刪除後再插入的速記(已不建議的模式)。
REPLACE INTO settings(k, v) VALUES ('theme', 'dark')UPDATE / DELETE修改或刪除列。沒有 WHERE 時會影響整張表。
UPDATE ... ORDER BY ... LIMIT n;多表 UPDATE t1, t2 SET ... WHERE ...;ON DELETE CASCADE
UPDATE orders SET status='paid' WHERE user_id = 42 AND status='pending' ORDER BY created_at LIMIT 100;DELETE ... ORDER BY ... LIMIT N緩慢刪除大批資料,避免 undo 檔與鎖定時間過長。
LIMIT N;重複執行迴圈;若是全表可考慮 TRUNCATE
DELETE FROM events WHERE created_at < now() - INTERVAL 30 DAY ORDER BY id LIMIT 5000查詢與篩選
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... OFFSET ...讀取資料列,搭配篩選、排序、分頁。
DISTINCT;IN (子查詢) / ANY / ALL;BETWEEN;IS NULL;REGEXP;STRAIGHT_JOIN 提示
SELECT id, status FROM orders WHERE user_id = 42 AND status IN ('paid','shipped') ORDER BY created_at DESC LIMIT 10 OFFSET 20;GROUP BY ... HAVING ...彙總資料,再對彙總結果做篩選。
sql_mode=ONLY_FULL_GROUP_BY(8.0+);WITH ROLLUP 加上總計列
SELECT user_id, count(*) AS n, sum(total) AS gmv FROM orders GROUP BY user_id HAVING count(*) >= 3 ORDER BY gmv DESC LIMIT 50;連接
[INNER | LEFT | RIGHT | CROSS] JOIN ... ON ...合併多張資料表的列。
STRAIGHT_JOIN;USING(col);MySQL 8.0+ 才支援 nested-loop/hash join;JSON_TABLE
SELECT u.email, count(o.id) FROM users u LEFT JOIN orders o ON o.user_id = u.id GROUP BY u.email ORDER BY count(o.id) DESC;WITH cte AS (...) SELECT ...Common Table Expression——8.0 起支援遞迴。
WITH RECURSIVE org AS (SELECT id, manager_id, name FROM staff WHERE manager_id IS NULL UNION ALL SELECT s.id, s.manager_id, s.name FROM staff s JOIN org o ON s.manager_id = o.id) SELECT * FROM org;彙總
COUNT() / SUM() / AVG() / MIN() / MAX() / GROUP_CONCAT()內建的彙總函式。
COUNT(DISTINCT x);GROUP_CONCAT(col ORDER BY col SEPARATOR ',')
SELECT day(created_at) AS d, sum(total) AS gmv, count(*) AS n FROM orders GROUP BY day(created_at) ORDER BY d DESC LIMIT 7;索引與視圖
CREATE INDEX ...新增次要索引以加速查找與 ORDER BY。
UNIQUE;FULLTEXT/SPATIAL(視儲存引擎);ON tbl(col, ...) 複合索引;INVISIBLE 旗標(8.0+);索引鍵可加 DESC
CREATE INDEX idx_user_created ON orders(user_id, created_at DESC) ALGORITHM=INPLACE LOCK=NONE;DROP INDEX / ALTER TABLE ... DROP INDEX移除索引。用 ALTER TABLE 可一次新增與刪除。
ALTER TABLE orders DROP INDEX idx_user_created;CREATE VIEW / CREATE OR REPLACE VIEW儲存 SELECT 定義;可更新的視圖在限制下支援 INSERT/UPDATE/DELETE。
CREATE OR REPLACE;WITH CHECK OPTION 強制寫入時符合 WHERE;ALGORITHM=MERGE|TEMPTABLE
CREATE OR REPLACE ALGORITHM=MERGE SQL SECURITY INVOKER VIEW v_user_orders AS SELECT user_id, count(*) AS n FROM orders GROUP BY user_id;交易
START TRANSACTION / COMMIT / ROLLBACK把陳述式包進 ACID 單元;預設為 autocommit(單陳述式不必包交易)。
START TRANSACTION WITH CONSISTENT SNAPSHOT;COMMIT;ROLLBACK TO SAVEPOINT
START TRANSACTION; UPDATE ...; ROLLBACK;SET autocommit = 0; SET TRANSACTION ISOLATION LEVEL ...關閉逐陳述式的 autocommit;可變更隔離層級:REPEATABLE READ(InnoDB 預設)、READ COMMITTED、READ UNCOMMITTED、SERIALIZABLE。
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET autocommit = 0;SELECT ... FOR UPDATE / LOCK IN SHARE MODE並發情境下用列級鎖定保護資料。8.0+ 提供 NOWAIT/SKIP LOCKED。
FOR UPDATE NOWAIT / SKIP LOCKED
SELECT id FROM jobs WHERE status='queued' ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED;備份與還原
mysqldump -u <user> -p <db> > dump.sql邏輯備份:把 SQL INSERT/DDL 輸出到檔案。
--single-transaction 適用 InnoDB;--routines;--triggers;--no-data 僅結構;--add-drop-table;--column-statistics=0
mysqldump -u root -p --single-transaction --routines --triggers --events app > /backup/app-$(date +%F).sqlmysql -u root -p <db> < dump.sql把 SQL dump 重放到目標資料庫。
--force;--auto-rehash;--comments
mysql -u root -p app_new < /backup/app.sqlSOURCE /path/script.sql在 REPL 內執行 SQL 腳本。
source 最後一個陳述式不需分號結束;在 CLI 對應 \.
SOURCE /tmp/migrations/0002_add_index.sql;mysqlbinlog binlog.000001 > incr.sql把 binary log 轉成 SQL,用於 point-in-time recovery。
--start-datetime;--stop-datetime;--start-position;--stop-position
mysqlbinlog --start-datetime='2026-07-23 00:00:00' /var/lib/mysql/binlog.000123 > /inc.sql使用者與權限
CREATE USER / ALTER USER / DROP USER管理 MySQL 帳號。
IDENTIFIED BY '...';IDENTIFIED WITH caching_sha2_password;WITH MAX_CONNECTIONS 10;
CREATE USER 'reporting'@'%' IDENTIFIED BY 'P@ssw0rd!'; ALTER USER 'app'@'%' PASSWORD EXPIRE NEVER;GRANT / REVOKE物件與全域權限;組合決定實際能力。
GRANT SELECT ON app.* TO 'reporting'@'%';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, DELETE ON app.* TO 'app'@'%';FLUSH PRIVILEGES手動修改授權表後重新載入記憶體中的副本(執行 GRANT 後不必再跑)。
FLUSH HOSTS / LOGS / TABLES
FLUSH PRIVILEGES;診斷
SHOW PROCESSLIST / KILL <id>檢視執行中的執行緒;KILL 掉卡住或過久的查詢。
SHOW FULL PROCESSLIST 顯示完整 SQL;KILL CONNECTION 中斷用戶端;KILL QUERY 只停查詢
SHOW FULL PROCESSLIST\G; KILL 12345;SHOW ENGINE INNODB STATUS\G詳細的 InnoDB 診斷資訊:鎖、交易、buffer pool、history。
PERFORMANCE_SCHEMA 查詢:SELECT * FROM performance_schema.events_statements_summary_by_digest_by_error;
SHOW ENGINE INNODB STATUS\G相關命令速查
postgresql
PostgreSQL 快速參考:psql 客戶端指令、DDL/DML 陳述式、join/彙總、索引、交易與備份/還原——附常用參數與實作範例。
36 條命令
PostgreSQL 14+
redis cli
redis-cli 快速參考:連線與資訊、key/string、雜湊、列表、集合、有序集合、串流、pub/sub、伺服器管理、持久化與複製、診斷——附常用參數與實作範例。
42 條命令
Redis 6.2+
mongodb
mongosh 快速參考:連線、CRUD、查詢運算子、聚合管線、索引、副本集、使用者與匯出/還原——附最常見的 shell 模式與實作範例。
30 條命令
MongoDB 6.0+ / mongosh 1.6+
商標與使用聲明
本批命令列工具速查手冊為開源社群參考資料。文中涉及的各工具的名稱、標識、商標(如 Git™、Docker™、Kubernetes®、kubectl、PostgreSQL®、MySQL®、Redis™、MongoDB®、Linux™、PowerShell™、Vim™ 等)均歸對應權利人所有,此處僅為識別與參考之目的使用。
本速查手冊的全部內容均為獨立編寫的簡化自包含參考,**與任何官方文件不存在隸屬、被認可或引用關係**。命令列表、參數說明、範例均為作者原創簡化表達;如需權威資訊,請參閱各工具的官方文件。
命令語法與參數可能在不同工具版本中有所差異。所示版本標籤對應穩定發佈版本;其他版本行為可能有所不同。本速查手冊**不代表**商標權利人的任何偏好或推薦。
如商標或版權方認為本站部分內容存在權益侵害,請發送電郵至[email protected],我們在收到有效權屬證明後,會在合理期限內修改或移除相關內容。
本網站不對因使用本站資訊而產生的任何直接或間接損失承擔法律責任。
關於 MySQL / MariaDB
MySQL 係 Michael Widenius(Monty)同 David Axmark 喺 1995 年喺 MySQL AB 創造嘅開源關聯式資料庫管理系統;2010 年起由 Sun、再由 Oracle 接手,社群 fork 嘅 MariaDB(2012 年)就由原創辦人喺純 GPL 嘅路線維護。當前穩定線係 MySQL 8.0+ 同 MariaDB 10.11+/11.x。MySQL 將可插拔儲存引擎架構——InnoDB(自 5.5 起為預設,係唯一完整 ACID 同支援行級鎖定嘅引擎)、MyISAM(舊有,僅資料表級鎖定)、MEMORY、CSV——普及化,亦係最早期 LAMP 疊入面嘅「M」,承載咗早期 Web 嘅大部分流量。佢支援標準 SQL 及其擴充、複製(非同步、半同步、群組)、資料分割、JSON 欄位(二進位儲存,可以透過產生欄位加索引),以及涵蓋所有主流語言嘅豐富連接器。中等規模嘅 OLTP、Web 後端、需要一台久經驗證、行為可預測嘅 SQL 引擎而唔係花巧特性嘅嵌入式應用都應該用 MySQL。MySQL 嘅經典安全陷阱係嗰個容許 `localhost` 免密碼登入嘅匿名帳戶——每次全新安裝之後務必執行一次 `mysql_secure_installation`。
速查頁版本 1.0.0