整理平時較少用但關鍵時刻必須精準掌握的指令:用戶全生命週期、欄位變更、索引維護、查詢快取控制。
-- 完整語法
GRANT privileges (columns) ON what TO user IDENTIFIED BY 'password' WITH GRANT OPTION;
-- 範例:超級用戶
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'strong_pass' WITH GRANT OPTION;
-- 範例:唯讀用戶
GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY 'pass';
權限指定符對照:
| 權限 | 允許操作 |
|---|---|
| ALTER | 修改表/索引 |
| CREATE | 建立資料庫/表 |
| DELETE | 刪除記錄 |
| DROP | 刪除資料庫/表 |
| INDEX | 建立/刪除索引 |
| INSERT | 插入新行 |
| SELECT | 查詢記錄 |
| UPDATE | 修改記錄 |
| FILE | 讀寫伺服器檔案 |
| PROCESS | 查看/殺死執行緒 |
| RELOAD | 重載授權表/清快取 |
| SHUTDOWN | 關閉伺服器 |
| ALL | 所有權限 |
| USAGE | 無實際權限(建帳號用) |
-- 撤銷權限
REVOKE privileges (columns) ON what FROM user;
FLUSH PRIVILEGES; -- 直接修改授權表時需手動刷新;GRANT/REVOKE 自動刷新
-- 刪除用戶
DROP USER 'user'@'host';
-- 或
DELETE FROM mysql.user WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;
-- 普通索引(允許重複值)
ALTER TABLE `table_name` ADD INDEX `idx_name` (`col1`[, `col2`...]);
-- 範例
ALTER TABLE `employee` ADD INDEX `emp_name` (`name`);
-- 主鍵(自動唯一、非空)
ALTER TABLE `table_name` ADD PRIMARY KEY (`col_name`);
-- 範例
ALTER TABLE `employee` ADD PRIMARY KEY (`id`);
-- 唯一索引
ALTER TABLE `table_name` ADD UNIQUE `idx_name` (`col_name`);
-- 範例
ALTER TABLE `employee` ADD UNIQUE `emp_card` (`card_number`);
ALTER TABLE `table_name` DROP INDEX `idx_name`;
-- 範例
ALTER TABLE `employee` DROP INDEX `emp_name`;
SHOW INDEX FROM `table_name`;
-- 範例
SHOW INDEX FROM `employee`;
-- 末尾新增
ALTER TABLE `table_name` ADD COLUMN `col_name` `data_type`;
-- 指定位置新增
ALTER TABLE `table_name` ADD COLUMN `col_name` `data_type` FIRST;
ALTER TABLE `table_name` ADD COLUMN `col_name` `data_type` AFTER `existing_col`;
ALTER TABLE `table_name` DROP COLUMN `col_name`;
-- 修改預設值
ALTER TABLE `table_name` ALTER COLUMN `col_name` SET DEFAULT 'new_default';
ALTER TABLE `table_name` ALTER COLUMN `col_name` DROP DEFAULT;
-- 修改欄位定義(含重命名、型別變更、位置移動)
ALTER TABLE `table_name` CHANGE COLUMN `old_name` `new_name` `data_type` [FIRST|AFTER `col`];
-- 型別不一致時 MySQL 自動嘗試轉換
SHOW VARIABLES LIKE 'have_query_cache';
-- Value = YES 表示支援並啟用
FLUSH QUERY CACHE;
RESET QUERY CACHE;
query_cache_limit:單一查詢結果最大快取值query_cache_size:快取總記憶體大小query_cache_type:ON/OFF/DEMANDquery_cache_min_res_unit:快取塊最小單位query_cache_wlock_invalidate:WRITE LOCK 時是否失效快取