服務管理
# Linux (Systemd)
systemctl start|stop|restart|status mysqld
service mysqld start|stop|restart|status
# Windows
net start mysql
net stop mysql
sc start mysql
連接與基礎操作
# 連接
mysql -u root -p
mysql -h host -u user -p dbname
# 交互命令
SHOW DATABASES;
USE dbname;
SHOW TABLES;
SHOW COLUMNS FROM tbl;
DESC tbl;
數據庫/表結構管理
-- 建庫/刪庫
CREATE DATABASE dbname CHARSET utf8mb4;
DROP DATABASE dbname;
-- 建表/刪表
CREATE TABLE tbl (id INT PRIMARY KEY, name VARCHAR(50));
DROP TABLE tbl;
-- 判斷存在再建
CREATE TABLE IF NOT EXISTS tbl (...);
DROP TABLE IF EXISTS tbl;
-- 複製表結構
CREATE TABLE tbl2 LIKE tbl1;
-- 複製表結構+數據
CREATE TABLE tbl2 SELECT * FROM tbl1;
-- 重命名表
RENAME TABLE tbl1 TO tbl2;
ALTER TABLE tbl1 RENAME tbl2;
列操作
-- 增加列
ALTER TABLE tbl ADD COLUMN col1 INT DEFAULT 0;
ALTER TABLE tbl ADD COLUMN col1 INT AFTER col2, ADD COLUMN col2 VARCHAR(50);
-- 修改列
ALTER TABLE tbl MODIFY col1 BIGINT NOT NULL;
ALTER TABLE tbl CHANGE old_col new_col INT DEFAULT 0;
-- 刪除列
ALTER TABLE tbl DROP COLUMN col1;
索引管理
-- 創建
ALTER TABLE tbl ADD INDEX idx_name (col1);
CREATE INDEX idx_name ON tbl (col1);
CREATE UNIQUE INDEX uk_name ON tbl (col1);
ALTER TABLE tbl ADD PRIMARY KEY (id);
-- 刪除
DROP INDEX idx_name ON tbl;
ALTER TABLE tbl DROP INDEX idx_name;
ALTER TABLE tbl DROP PRIMARY KEY;
數據操作 (DML)
-- 插入
INSERT INTO tbl (col1, col2) VALUES (1, 'a'), (2, 'b');
INSERT INTO tbl SELECT * FROM other_tbl;
-- 更新
UPDATE tbl SET col2='new' WHERE col1=1;
UPDATE tbl SET col2=col2+1 WHERE col1>10 ORDER BY col1 LIMIT 100;
-- 刪除
DELETE FROM tbl WHERE col1=1;
TRUNCATE TABLE tbl; -- 重置自增、極快
查詢分析
-- 執行計劃
EXPLAIN SELECT * FROM tbl WHERE id=1;
DESC SELECT * FROM tbl WHERE id=1;
-- 通配符
SELECT * FROM tbl WHERE name LIKE 'a%';
SELECT * FROM tbl WHERE name LIKE '_bc';
-- 分頁
SELECT * FROM tbl LIMIT 10; -- 前 10
SELECT * FROM tbl LIMIT 10, 20; -- 跳過 10 取 20
SELECT * FROM tbl LIMIT 20 OFFSET 10; -- 5.6+ 標準寫法
備份與恢復
# 邏輯備份
mysqldump -u root -p dbname > backup.sql
mysqldump -u root -p dbname tbl1 tbl2 > backup.sql
mysqldump -u root -p --single-transaction --routines --triggers dbname > full.sql
# 恢復
mysql -u root -p dbname < backup.sql
# 物理備份 (需停庫/鎖表)
cp -r /var/lib/mysql /backup/
# 或 xtrabackup (熱備份)
用戶權限
-- 創建用戶
CREATE USER 'user'@'%' IDENTIFIED BY 'pass';
-- 授權
GRANT ALL ON db.* TO 'user'@'%';
GRANT SELECT, INSERT ON db.* TO 'user'@'%';
-- 撤銷
REVOKE ALL ON db.* FROM 'user'@'%';
-- 刷新
FLUSH PRIVILEGES;
-- 修改密碼 (5.7+)
ALTER USER 'user'@'%' IDENTIFIED BY 'newpass';
SET PASSWORD FOR 'user'@'%' = 'newpass';
常用系統變量查看
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
SHOW ENGINE INNODB STATUS\G
優化相關
-- 分析表
ANALYZE TABLE tbl;
-- 檢查表
CHECK TABLE tbl [QUICK|FAST|MEDIUM|EXTENDED|CHANGED];
-- 優化表 (碎片整理)
OPTIMIZE TABLE tbl;
-- 索引使用統計
SHOW INDEX FROM tbl;
SHOW STATUS LIKE 'Handler_read%';
字符集與編碼
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 修改表字符集
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
通配符速查
| 符號 | 含義 | 示例 |
| % | 任意長度字符(含0) | 'a%' 'ab%c' |
| _ | 任意單字符 | 'a_' '_bc' '___' |
| [...] | 字符集合 (REGEXP) | REGEXP '[abc]' |
| [^...] | 非字符集合 | REGEXP '[^0-9]' |
語句結束符
- 分號
; (默認)
\g (等同分號)
\G (垂直顯示結果)
- 自定義:
DELIMITER // ... // DELIMITER ;
多行輸入技巧
- 單條語句不可拆行(字符串中硬換行會被存入)
- 存儲過程/觸發器用
DELIMITER 修改結束符
- 交互模式下未閉合引號/括號可換行繼續輸入