建立資料庫
基本語法
CREATE DATABASE [IF NOT EXISTS] db_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
實戰範例
-- 標準建庫(指定字符集校對)
CREATE DATABASE IF NOT EXISTS `xiaoxiaozi`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 驗證
SHOW CREATE DATABASE xiaoxiaozi;
-- 結果:CREATE DATABASE `xiaoxiaozi` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
命名規範與限制
- 長度 ≤ 64 字符。
- 允許字母、數字、底線、$、@;**避免保留字、純數字、特殊符號**。
- Linux 區分大小寫,Windows 不區分 → **統一小寫 + 底線**。
- 含特殊字符/保留字/純數字時**必須用反引號包裹**:
CREATE DATABASE \`123\`;
避免「資料庫已存在」報錯
-- ❌ 重複執行報錯
CREATE DATABASE test; -- ERROR 1007 (HY000)
-- ✅ 安全寫法
CREATE DATABASE IF NOT EXISTS test; -- 返回 Warning 而非 Error,腳本可重入
選擇/切換資料庫
USE 語句
USE xiaoxiaozi; -- 後續無前綴表操作默認在此庫
-- 返回:Database changed
跨庫查詢(無需切換)
SELECT Host, Db, User FROM mysql.db; -- 顯式指定 mysql.db
SELECT * FROM other_db.some_table; -- 單表跨庫
SELECT * FROM db1.t1 JOIN db2.t2 ON db1.t1.id = db2.t2.id; -- 多表跨庫
刪除資料庫
基本語法
DROP DATABASE [IF EXISTS] db_name;
實戰與避坑
-- ❌ 刪除不存在庫報錯
DROP DATABASE xiaoxiaozi; -- ERROR 1008 (HY000)
-- ✅ 安全寫法
DROP DATABASE IF EXISTS xiaoxiaozi; -- 返回 Warning,腳本可重入
-- ⚠️ 危險:DROP 會連同所有表、視圖、觸發器、程序、數據**不可逆刪除**
-- 生產環境建議:
-- 1. 先備份:mysqldump db_name > backup.sql
-- 2. 重命名驗證:RENAME DATABASE old TO old_deprecated_20240101; (MySQL 不支援 RENAME DATABASE,需建新庫導入再刪舊)
-- 3. 雙人覆核、變更單據
檔案系統層面
- 每個資料庫對應
datadir 下一個**目錄**(如 /var/lib/mysql/xiaoxiaozi/)。
- 目錄名即資料庫名,**文件系統大小寫敏感性決定資料庫名大小寫敏感性**。
- 手動刪除目錄**極度危險**,會導致資料字典不一致,嚴禁操作。
資料庫層級權限模型
-- 僅授予特定庫權限
GRANT SELECT, INSERT, UPDATE, DELETE ON `xiaoxiaozi`.* TO 'app'@'10.0.%';
-- 不給 DROP、ALTER、CREATE、INDEX 等 DDL 權限
總結速查表
| 操作 |
命令 |
關鍵選項 |
最佳實踐 |
| 建立 |
CREATE DATABASE |
IF NOT EXISTS, CHARACTER SET utf8mb4, COLLATE utf8mb4_unicode_ci |
統一小寫、反引號、指定字符集、腳本可重入 |
| 切換 |
USE |
-- |
連接字串指定 dbname 可省略 USE |
| 跨庫查詢 |
db.table |
-- |
明確 Schema 前綴,避免歧義 |
| 刪除 |
DROP DATABASE |
IF EXISTS |
備份先行、雙人覆核、變更單據、軟刪除重命名替代 |