彙整 MySQL 日常開發運維 95% 場景指令,分類標籤化,適合列印貼牆或存入筆記本離線查閱。
mysql -h host -u user -p[pass] -P port -D db mysql -u root -p SHOW DATABASES; USE db; SHOW TABLES; DESC tbl; SELECT VERSION(), USER(), DATABASE(), NOW();
-- 庫 CREATE DATABASE db CHARSET utf8mb4; DROP DATABASE db; ALTER DATABASE db CHARSET utf8mb4; -- 表 CREATE TABLE t (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)) ENGINE=InnoDB; DROP TABLE t; TRUNCATE TABLE t; RENAME TABLE t1 TO t2; CREATE TABLE t2 LIKE t1; -- 只複製結構 CREATE TABLE t2 SELECT * FROM t1; -- 複製結構+資料 (無索引/約束/預設值) CREATE TABLE t2 SELECT * FROM t1 WHERE 1<>1; -- 只複製結構 -- 欄位 ALTER TABLE t ADD col VARCHAR(50); ALTER TABLE t DROP COLUMN col; ALTER TABLE t MODIFY col VARCHAR(100); ALTER TABLE t CHANGE old_col new_col VARCHAR(100); -- 索引 CREATE INDEX idx_name ON t(name); CREATE UNIQUE INDEX uk_email ON t(email); ALTER TABLE t ADD INDEX idx_name (name); DROP INDEX idx_name ON t; ALTER TABLE t DROP INDEX idx_name; -- 約束 ALTER TABLE t ADD CONSTRAINT pk_t PRIMARY KEY (id); ALTER TABLE t DROP PRIMARY KEY; ALTER TABLE t ADD CONSTRAINT fk_t_ref FOREIGN KEY (ref_id) REFERENCES ref(id); ALTER TABLE t DROP FOREIGN KEY fk_t_ref; ALTER TABLE t ADD CONSTRAINT uk_t_col UNIQUE (col); ALTER TABLE t DROP INDEX uk_t_col;
INSERT INTO t (name) VALUES ('a'),('b');
INSERT INTO t SELECT name FROM t2;
UPDATE t SET name='c' WHERE id=1;
DELETE FROM t WHERE id=2;
SELECT * FROM t WHERE name LIKE 'a%' ORDER BY id DESC LIMIT 10;
SELECT COUNT(*) FROM t;
SELECT DISTINCT name FROM t;
CREATE USER 'u'@'%' IDENTIFIED BY 'pass';
GRANT SELECT,INSERT ON db.* TO 'u'@'%';
GRANT ALL ON *.* TO 'admin'@'%' WITH GRANT OPTION;
REVOKE INSERT ON db.* FROM 'u'@'%';
SHOW GRANTS FOR 'u'@'%';
DROP USER 'u'@'%';
FLUSH PRIVILEGES;
-- 修改密碼
SET PASSWORD FOR 'u'@'%' = PASSWORD('newpass'); -- 5.6
ALTER USER 'u'@'%' IDENTIFIED BY 'newpass'; -- 5.7+
mysqldump -u root -p --databases db > dump.sql mysqldump -u root -p db tbl > dump.sql mysqldump -u root -p -t db tbl > data_only.sql mysql -u root -p db < dump.sql mysql -u root -p -e "SOURCE /path/dump.sql;"
LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE t FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
EXPLAIN SELECT * FROM t WHERE name='a'; ANALYZE TABLE t; OPTIMIZE TABLE t; -- 整理碎片 (MyISAM/InnoDB) CHECK TABLE t; REPAIR TABLE t QUICK; -- 快速重建索引 (MyISAM) SHOW INDEX FROM t; SHOW TABLE STATUS LIKE 't'\G
| 欄位 | 理想值 |
|---|---|
| type | ref, eq_ref, const (避免 ALL) |
| key | 非 NULL |
| rows | 越少越好 |
| Extra | 無 Using temporary/filesort |
SELECT * FROM t USE INDEX (idx_name) WHERE name='a'; SELECT * FROM t IGNORE INDEX (idx_bad) WHERE name='a'; SELECT * FROM t FORCE INDEX (idx_name) WHERE name='a';