涵蓋從安裝部署到日常運維的高頻命令,分類清晰、語法標準、備註實用,建議收藏為 mysql-cheatsheet.md。
# 啟動/停止/重啟
net start mysql
net stop mysql
systemctl start|stop|restart mysqld
service mysql start|stop|restart
# 開機自啟
chkconfig mysql on
systemctl enable mysqld
mysql -h host -P port -u user -p -D db
# 登入後
SELECT VERSION(), CURRENT_DATE, USER(), DATABASE();
SHOW VARIABLES LIKE 'char%'; -- 字符集
SHOW ENGINES; -- 引擎支持
CREATE DATABASE [IF NOT EXISTS] db_name CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
SHOW DATABASES;
SHOW CREATE DATABASE db_name;
ALTER DATABASE db_name CHARSET utf8mb4;
DROP DATABASE [IF EXISTS] db_name;
USE db_name;
SELECT DATABASE(); -- 當前庫
# 創建
CREATE TABLE [IF NOT EXISTS] tbl (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB CHARSET=utf8mb4;
# 查看
SHOW TABLES;
SHOW CREATE TABLE tbl;
DESC tbl; -- 或 DESCRIBE/EXPLAIN/SHOW COLUMNS
SHOW TABLE STATUS LIKE 'tbl';
# 修改
ALTER TABLE tbl RENAME TO new_tbl;
ALTER TABLE tbl ENGINE=InnoDB;
ALTER TABLE tbl ADD COLUMN col VARCHAR(32) NOT NULL DEFAULT '' AFTER name;
ALTER TABLE tbl DROP COLUMN col;
ALTER TABLE tbl MODIFY COLUMN col VARCHAR(64) NOT NULL DEFAULT '';
ALTER TABLE tbl CHANGE COLUMN old_col new_col VARCHAR(64) NOT NULL DEFAULT '';
ALTER TABLE tbl ADD PRIMARY KEY (col);
ALTER TABLE tbl ADD UNIQUE INDEX uk_col (col);
ALTER TABLE tbl ADD INDEX idx_col (col);
ALTER TABLE tbl DROP PRIMARY KEY;
ALTER TABLE tbl DROP INDEX idx_col;
ALTER TABLE tbl AUTO_INCREMENT = 1000;
# 刪除/清空
DROP TABLE [IF EXISTS] tbl;
TRUNCATE TABLE tbl; -- 重建表,重置自增,不可回滾
# 復制
CREATE TABLE new_tbl LIKE old_tbl; -- 結構
CREATE TABLE new_tbl AS SELECT * FROM old_tbl; -- 結構+數據
# 增
INSERT INTO tbl (col1, col2) VALUES (val1, val2), (val3, val4);
INSERT INTO tbl SET col1=val1, col2=val2;
REPLACE INTO tbl ... -- 主鍵/唯一鍵衝突則刪舊插新
INSERT IGNORE INTO tbl ... -- 忽略重複鍵錯誤
INSERT ... ON DUPLICATE KEY UPDATE col2=VALUES(col2); -- 衝突更新
# 刪
DELETE FROM tbl WHERE condition [ORDER BY ...] [LIMIT n];
# 多表刪除
DELETE t1 FROM t1 JOIN t2 ON t1.id=t2.t1_id WHERE t2.status=0;
# 改
UPDATE tbl SET col1=val1, col2=val2 WHERE condition [ORDER BY ...] [LIMIT n];
# 多表更新
UPDATE t1 JOIN t2 ON t1.id=t2.t1_id SET t1.col=t2.col WHERE t2.type=1;
# 查
SELECT [DISTINCT] col1, col2 FROM tbl [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...] [LIMIT offset, count];
SHOW CHARACTER SET; -- 所有字符集
SHOW COLLATION; -- 所有校對集
SET NAMES utf8mb4; -- 連接層三件套
SET character_set_client=utf8mb4, character_set_results=utf8mb4, character_set_connection=utf8mb4;
# 整數
TINYINT(1) -- 布爾
SMALLINT, MEDIUMINT, INT, BIGINT
UNSIGNED -- 非負翻倍
# 浮點/定點
FLOAT(M,D), DOUBLE(M,D) -- 近似
DECIMAL(M,D) -- 精確,金額必用
# 字符串
CHAR(M), VARCHAR(M), TEXT, BLOB
BINARY, VARBINARY -- 二進制
# 日期時間
DATE, TIME, DATETIME(8B), TIMESTAMP(4B, 時區), YEAR
# 枚舉/集合(慎用)
ENUM('a','b'), SET('a','b')
PRIMARY KEY -- 主鍵
UNIQUE -- 唯一
NOT NULL -- 非空
DEFAULT expr -- 默認值
AUTO_INCREMENT -- 自增(需索引)
COMMENT 'text' -- 註釋
FOREIGN KEY (fk) REFERENCES parent(pk) ON DELETE CASCADE ON UPDATE SET NULL -- 僅 InnoDB
# mysqldump 邏輯備份
mysqldump -u user -p db tbl1 tbl2 > backup.sql
mysqldump -u user -p -B db1 db2 > dbs.sql -- 含 CREATE DATABASE
mysqldump -u user -p --single-transaction --routines --triggers --events db > full.sql
# 導入
mysql -u user -p db < backup.sql
SOURCE /path/backup.sql -- 客戶端內
CREATE [OR REPLACE] VIEW v_name [(col_list)] AS SELECT ...;
SHOW CREATE VIEW v_name;
DROP VIEW [IF EXISTS] v_name;
ALTER VIEW v_name AS SELECT ...;
START TRANSACTION; -- BEGIN
COMMIT;
ROLLBACK;
SAVEPOINT name;
ROLLBACK TO SAVEPOINT name;
RELEASE SAVEPOINT name;
SET autocommit=0|1;
LOCK TABLES t1 READ, t2 WRITE;
UNLOCK TABLES;
CREATE TRIGGER name BEFORE/AFTER INSERT/UPDATE/DELETE ON tbl FOR EACH ROW BEGIN ... END;
DROP TRIGGER name;
CREATE USER 'u'@'%' IDENTIFIED BY 'pwd';
GRANT priv_list ON db.tbl TO 'u'@'%' [IDENTIFIED BY 'pwd'];
SHOW GRANTS FOR 'u'@'%';
REVOKE priv_list ON db.tbl FROM 'u'@'%';
DROP USER 'u'@'%';
FLUSH PRIVILEGES;
ANALYZE TABLE tbl; -- 更新統計信息
CHECK TABLE tbl [QUICK|FAST|MEDIUM|EXTENDED|CHANGED];
OPTIMIZE TABLE tbl; -- 整理碎片
REPAIR TABLE tbl; -- 修復 MyISAM
# 反引號包裹標識符
SELECT `select`, `from` FROM `table`;
# 注釋
-- 註釋 (需空格)
# 註釋
/* 多行註釋 */
# 通配符
_ 單字符
% 多字符
# 語句結束符
; \G \g
DELIMITER // ... DELIMITER ;
# 清除當前語句
\c
這份速查表覆蓋 90%+ 日常操作場景,建議打印 A4 雙面放工位,或導入 IDE Live Templates 實現幾鍵輸入。