首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 數據庫操作核心命令速查:創建、編碼、切換、查看與刪除全覆蓋

     編輯:MySQL 資料庫相關知識

前言:庫級操作是權限與編碼的「第一道關卡」

數據庫對象管理是 MySQL 運維的基石。本文匯總創建、編碼設置、切換上下文、查看元數據、刪除清理的核心命令,重點解析**字符集層級傳遞機制**、**編碼遷移陷阱**、**權限隔離最佳實踐**,構建 DBA 庫級操作的標準化速查手冊。

一、創建數據庫:編碼決定論

1. 基礎語法


-- 最簡形式(繼承服務端默認字符集,通常 latin1,強烈不推薦)
CREATE DATABASE my_db;

-- 幂等創建
CREATE DATABASE IF NOT EXISTS my_db;

-- 生產級:顯式指定字符集與排序規則(黃金標準)
CREATE DATABASE IF NOT EXISTS my_db
    DEFAULT CHARACTER SET utf8mb4
    COLLATE utf8mb4_general_ci;

2. 字符集層級傳遞鏈路(核心知識點)


Server 默認字符集 (character_set_server)
    ↓ 未顯式指定時
Database 默認字符集 (CREATE DATABASE ... DEFAULT CHARSET)
    ↓ 未顯式指定時
Table 默認字符集 (CREATE TABLE ... DEFAULT CHARSET)
    ↓ 未顯式指定時
Column 字符集 (Column 定義 CHARSET)
  • 關鍵結論:庫級顯式指定 utf8mb4,後續建表無需重複聲明,**自動繼承**,杜絕「表級 latin1、列級 utf8」的編碼地獄。
  • COLLATE utf8mb4_general_ci:不區分大小寫、按字符集排序;utf8mb4_bin 區分大小寫、二進制比較(索引/唯一約束精確匹配常用)。

二、查看與切換上下文


-- 列出所有數據庫
SHOW DATABASES;
-- 或
SHOW SCHEMAS;

-- 切換當前會話默認數據庫(後續無前綴表操作針對此庫)
USE my_db;

-- 查看當前庫
SELECT DATABASE();

三、查看字符集配置:多維度診斷


-- 1. 服務端字符集系統變量(全景圖)
SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |  -- 客戶端發送編碼
| character_set_connection | utf8mb4                    |  -- 連接層轉碼目標
| character_set_database   | utf8mb4                    |  -- 當前庫默認編碼
| character_set_filesystem | binary                     |  -- 文件系統編碼
| character_set_results    | utf8mb4                    |  -- 結果集返回編碼
| character_set_server     | utf8mb4                    |  -- 服務端默認編碼
| character_set_system     | utf8                       |  -- 系統標識符編碼(固定)
| character_sets_dir       | /usr/share/mysql/charsets/ |  -- 字符集文件目錄
+--------------------------+----------------------------+

-- 2. 當前庫創建信息(含默認字符集)
SHOW CREATE DATABASE my_db;
-- 結果:CREATE DATABASE `my_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

-- 3. 所有支援字符集
SHOW CHARACTER SET;

四、修改數據庫字符集:遷移與陷阱


-- 僅修改庫默認字符集(僅影響後續新建表,現有表/列**不變**)
ALTER DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 真正遷移現有表數據:需逐表執行
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • 避坑:ALTER DATABASE **不轉換現有數據**,僅改元數據默認值。真正遷移必須逐表 CONVERT TO(鎖表重建)或用 gh-ost 線上遷移。
  • 遷移前必備:全量備份、應用兼容性測試、從庫先行驗證。

五、刪除數據庫:謹慎與幂等


-- 直接刪除(不存在報錯)
DROP DATABASE my_db;

-- 幂等刪除(部署/清理腳本推薦)
DROP DATABASE IF EXISTS my_db;
  • 級聯刪除:庫下所有表、視圖、觸發器、存儲過程、權限記錄、`.ibd` 文件(file_per_table=ON)同步清理。
  • 生產環境**嚴禁**直接 DROP DATABASE,需走變更流程:備份驗證 → 應用下線確認 → 從庫先刪 → 主庫刪 → 監控確認。

六、權限隔離最佳實踐:庫級最小權限模型


-- 應用讀寫賬戶(僅特定庫)
CREATE USER 'app_rw'@'192.168.1.%' IDENTIFIED BY 'StrongPass#2024';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `app_db`.* TO 'app_rw'@'192.168.1.%';

-- 應用只讀賬戶
CREATE USER 'app_ro'@'192.168.1.%' IDENTIFIED BY 'StrongPass#2024';
GRANT SELECT ON `app_db`.* TO 'app_ro'@'192.168.1.%';

-- 開發/測試賬戶(僅開發庫)
GRANT ALL PRIVILEGES ON `dev_db`.* TO 'dev_user'@'192.168.1.%';

-- DBA 管理賬戶(受限主機)
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
  • 按**庫粒度**授權,杜絕 *.* 濫用。
  • IP 白名單替代 %。
  • 定期審計 mysql.db/mysql.tables_priv 清理殭屍權限。

七、實戰速查卡片

操作命令關鍵參數
創建庫CREATE DATABASE IF NOT EXISTS db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;顯式編碼、幂等
查看庫編碼SHOW CREATE DATABASE db;元數據權威來源
查看會話編碼SHOW VARIABLES LIKE 'character_set_%';排查亂碼首選
切換庫USE db;會話上下文
修改庫默認編碼ALTER DATABASE db CHARSET utf8mb4;僅影響新表
遷移表編碼ALTER TABLE t CONVERT TO CHARSET utf8mb4;鎖表/線上工具
刪除庫DROP DATABASE IF EXISTS db;幂等、級聯清理

結語

數據庫操作雖「輕」,編碼傳遞、權限隔離、遷移陷阱卻「重」。掌握「庫級顯式 utf8mb4 → 表級自動繼承 → 列級無需聲明」的編碼鏈路,熟練 CONVERT TO 與 ALTER DATABASE 的語義邊界,落實「庫粒度授權、IP 白名單、幂等腳本」的運維鐵律,即可在百庫千表的雲端叢林中,構建**編碼純淨、權限極簡、變更可控**的數據治理體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved