整理 MySQL 日常開發運維最高頻的 DDL/DCL/DML 語句,採用標準語法與最佳實務命名慣例,適合離線速查。
-- 查看所有庫 SHOW DATABASES; -- 切換庫 USE db_name; -- 建庫 (指定字元集/排序規則) CREATE DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 刪庫 DROP DATABASE db_name; -- 查詢版本/用戶/當前庫 SELECT VERSION(), USER(), DATABASE();
-- 建立用戶 (MySQL 5.7+) CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!'; -- 授權 (生產環境建議最小權限原則) GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%'; -- 超級管理員 GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'StrongP@ssw0rd!' WITH GRANT OPTION; -- 刷新權限 FLUSH PRIVILEGES; -- 查看用戶權限 SHOW GRANTS FOR 'app_user'@'%'; -- 回收權限 REVOKE INSERT ON app_db.* FROM 'app_user'@'%'; -- 刪除用戶 DROP USER 'app_user'@'%';
-- 建表範例 (InnoDB + utf8mb4 + 註解) CREATE TABLE `user_account` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵ID', `username` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用戶名', `password_hash` CHAR(128) NOT NULL DEFAULT '' COMMENT '密碼雜湊', `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '信箱', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1啟用 0停用', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), KEY `idx_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶帳號表'; -- 查看表結構 DESCRIBE user_account; -- 或 SHOW CREATE TABLE user_account\G -- 刪表 DROP TABLE user_account; -- 級聯刪除約束 (外鍵場景) DROP TABLE user_account CASCADE CONSTRAINTS;
-- 主鍵 ALTER TABLE goods ADD CONSTRAINT pk_goods PRIMARY KEY (id); ALTER TABLE goods DROP PRIMARY KEY; -- 外鍵 ALTER TABLE goods ADD CONSTRAINT fk_goods_type FOREIGN KEY (type_id) REFERENCES goods_type(id); ALTER TABLE goods DROP FOREIGN KEY fk_goods_type; -- 唯一約束 ALTER TABLE item_detail ADD CONSTRAINT uk_item_order UNIQUE (goods_id, order_id); ALTER TABLE item_detail DROP INDEX uk_item_order; -- 唯一約束本質是唯一索引
-- 新增欄位 ALTER TABLE file_info ADD COLUMN convert_status VARCHAR(50) DEFAULT 'pending' COMMENT '轉換狀態'; -- 刪除欄位 ALTER TABLE file_info DROP COLUMN convert_status; -- 修改欄位 (型別/預設值/註解/重命名) ALTER TABLE file_info CHANGE COLUMN convert_status convert_status2 INT(11) DEFAULT 0 COMMENT '狀態碼'; -- 僅修改型別 ALTER TABLE file_info MODIFY COLUMN convert_status2 BIGINT(20) DEFAULT 0;
-- 建立普通索引 CREATE INDEX idx_user_email ON user_account(email); ALTER TABLE user_account ADD INDEX idx_user_email (email); -- 建立唯一索引 CREATE UNIQUE INDEX uk_user_phone ON user_account(phone); -- 刪除索引 DROP INDEX idx_user_email ON user_account; ALTER TABLE user_account DROP INDEX idx_user_email;
| 物件 | 前綴 | 範例 |
|---|---|---|
| 主鍵 | pk_ | pk_user_account |
| 外鍵 | fk_ | fk_order_user |
| 唯一索引/約束 | uk_ | uk_user_email |
| 普通索引 | idx_ | idx_user_created_at |
| 檢查約束 | ck_ | ck_user_status |
遵循統一命名慣例,能大幅降低維護成本,並讓 SHOW CREATE TABLE、EXPLAIN 輸出一目瞭然。