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

MySQL CREATE DATABASE 建庫實戰:命名規範、字元集指定、權限隔離與 SHOW DATABASES 驗證

     編輯:MySQL 資料庫相關知識

CREATE DATABASE 語法


CREATE DATABASE [IF NOT EXISTS] db_name
  [CHARACTER SET charset_name]
  [COLLATE collation_name]

命名規範 (避坑指南)

規則正確範例錯誤範例原因
字元集合字母、數字、_、$db-name, db@name連字符、@ 等特殊字元需反引號包裹,易出錯
首字元字母、_、$123db純數字開頭與數值常數衝突
長度限制≤ 64 字元超長名稱系統表欄位長度限制
保留字避免 select, order, group, key 等CREATE DATABASE select;需反引號 \`select\`,極易誤用
大小寫敏感度Linux 區分,Windows 不區分DbName vs dbname跨平台遷移建議全小寫 + 底線

字元集與排序規則指定 (強烈建議顯式指定)


-- 推薦:utf8mb4 + unicode_ci (支援 Emoji、多語言、正確排序)
CREATE DATABASE IF NOT EXISTS myapp
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

-- 兼容舊系統:utf8 + general_ci (不支援補充字元、排序較粗略)
CREATE DATABASE IF NOT EXISTS legacy_app
  CHARACTER SET utf8
  COLLATE utf8_general_ci;
不指定則繼承服務器預設 character_set_server / collation_server,易導致跨環境不一致。顯式指定是專業習慣。

驗證建庫結果


-- 列出所有資料庫
SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| myapp              |
| legacy_app         |
| performance_schema |
| sys                |
+--------------------+

-- 查看特定資料庫建立語句 (含字元集/排序規則)
SHOW CREATE DATABASE myapp\G
*************************** 1. row ***************************
Database: myapp
Create Database: CREATE DATABASE `myapp` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */

權限隔離:建庫即建專用帳號


-- 1. 建立資料庫
CREATE DATABASE IF NOT EXISTS shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 建立應用帳號 (僅限該庫)
CREATE USER 'shop_app'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON shop.* TO 'shop_app'@'%';

-- 3. 建立唯讀帳號 (報表/分析)
CREATE USER 'shop_ro'@'%' IDENTIFIED BY 'StrongPass456!';
GRANT SELECT ON shop.* TO 'shop_ro'@'%';

-- 4. 建立遷移/管理帳號 (臨時、高權限)
CREATE USER 'shop_dba'@'10.0.1.%' IDENTIFIED BY 'StrongPass789!';
GRANT ALL PRIVILEGES ON shop.* TO 'shop_dba'@'10.0.1.%';

FLUSH PRIVILEGES;

刪除資料庫 (謹慎操作)


DROP DATABASE [IF EXISTS] db_name;
-- 會同時刪除該庫所有表、視圖、程序、觸發器、資料,不可恢復!
-- 生產環境建議:先 RENAME TABLE db_name TO db_name_bak_20240101; 確認無誤後再 DROP。

資料庫層級配置 (my.cnf 區段)


# 針對特定資料庫的參數覆蓋 (較少用,通常實例級統一)
# 5.7+ 支援資源群組 Resource Groups 綁定 CPU
# 8.0+ 支援 Persisted Variables 持久化 SET PERSIST
建庫三部曲:規範命名 → 顯式字元集 → 專用帳號最小權限。納入自動化部署腳本,確保跨環境 (Dev/Test/Staging/Prod) 一致性,避免「在我機器上好好的」字元集亂碼災難。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved