萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 資料庫建立、選擇與刪除命令詳解(含命名規範與 IF NOT EXISTS 避坑)

建立資料庫

基本語法

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 備份先行、雙人覆核、變更單據、軟刪除重命名替代
copyright © 萬盛學電腦網 all rights reserved