MySQL 數(shù)據(jù)庫表創(chuàng)建過程
更新時間:2025年07月25日 11:13:08 作者:m0_75107803
這篇文章主要介紹了MySQL 數(shù)據(jù)庫表創(chuàng)建過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
MySQL 數(shù)據(jù)庫表創(chuàng)建詳解
一、核心語法結(jié)構(gòu)
CREATE TABLE [IF NOT EXISTS] table_name (
column1 datatype [column_constraints],
column2 datatype [column_constraints],
...
[table_constraints]
)
[ENGINE = storage_engine]
[DEFAULT] CHARACTER SET charset_name
[COLLATE collation_name]
[COMMENT 'table_comment'];參數(shù)說明:
IF NOT EXISTS:可選,避免表已存在時報錯table_name:表名,遵循命名規(guī)范(建議小寫+下劃線)column_constraints:字段級約束(如NOT NULL、DEFAULT等)table_constraints:表級約束(如PRIMARY KEY、FOREIGN KEY等)storage_engine:指定存儲引擎(如InnoDB、MyISAM)charset_name:字符集(推薦utf8mb4支持emoji)collation_name:排序規(guī)則(影響字符串比較)table_comment:表注釋,強烈建議添加
二、關(guān)鍵組件解析
字段定義 (field)
column_name datatype [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] [UNIQUE] [PRIMARY KEY] [COMMENT 'string']
詳細規(guī)則:
命名規(guī)則:
- 允許字符:字母(a-z)、數(shù)字(0-9)、美元符($)、下劃線(_)
- 長度限制:不超過64個字符
- 避免使用:MySQL保留字(如SELECT、WHERE)
- 命名風(fēng)格:建議全小寫+下劃線(user_name)
完整示例:
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵ID', username VARCHAR(30) NOT NULL UNIQUE COMMENT '用戶名', status TINYINT(1) DEFAULT 1 COMMENT '狀態(tài):1啟用0禁用', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間'
數(shù)據(jù)類型 (datatype)
| 類別 | 常用類型 | 說明 |
|---|---|---|
| 整數(shù) | INT, TINYINT, BIGINT | 可選UNSIGNED(無符號整數(shù)),如TINYINT UNSIGNED范圍0-255 |
| 浮點數(shù) | FLOAT, DOUBLE, DECIMAL | DECIMAL(10,2)固定精度,適合金額存儲 |
| 字符串 | VARCHAR(255), CHAR(1) | VARCHAR按需分配空間,CHAR固定長度 |
| 日期 | DATE, DATETIME, TIMESTAMP | TIMESTAMP自動時區(qū)轉(zhuǎn)換(1970-2038年),DATETIME支持更大范圍 |
| 大文本 | TEXT, LONGTEXT | TEXT約64KB,LONGTEXT約4GB,適合存儲JSON/HTML內(nèi)容 |
| 二進制 | BLOB, LONGBLOB | 通常只存儲文件路徑而非實際二進制數(shù)據(jù) |
選型建議:
- 狀態(tài)字段:TINYINT
- 用戶ID:INT UNSIGNED或BIGINT UNSIGNED
- 用戶名:VARCHAR(20-50)
- 密碼哈希:CHAR(60)(適合Bcrypt固定長度哈希值)
- 金額:DECIMAL(10,2)
- 文章內(nèi)容:LONGTEXT
字符集與校對規(guī)則
優(yōu)先級順序:字段級 > 表級 > 數(shù)據(jù)庫級 > 服務(wù)器級
推薦設(shè)置:
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
字符集對比:
- utf8:基本多語言平面(3字節(jié)/字符)
- utf8mb4:完整Unicode(4字節(jié)/字符),支持emoji表情
常用校對規(guī)則:
- utf8mb4_general_ci:簡單排序規(guī)則
- utf8mb4_unicode_ci:準確Unicode排序(推薦)
- utf8mb4_bin:二進制比較(區(qū)分大小寫)
存儲引擎 (ENGINE)
| 引擎 | 關(guān)鍵特性 | 適用場景 |
|---|---|---|
| InnoDB | 事務(wù)支持、行級鎖、外鍵約束 | 交易系統(tǒng)、需要ACID特性的表(默認) |
| MyISAM | 表級鎖、全文索引、高讀取性能 | 數(shù)據(jù)倉庫、日志表(MySQL 5.7前) |
| MEMORY | 內(nèi)存存儲、極速訪問、重啟數(shù)據(jù)丟失 | 臨時會話表、高速緩存 |
| Archive | 高壓縮比(約10:1)、只支持INSERT/SELECT | 歷史歸檔數(shù)據(jù) |
遷移引擎示例:
ALTER TABLE logs ENGINE=Archive;
三、完整創(chuàng)建示例
CREATE TABLE IF NOT EXISTS `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`username` VARCHAR(50) NOT NULL COMMENT '用戶名',
`password` CHAR(60) NOT NULL COMMENT 'Bcrypt加密密碼', -- 固定60字符長度
`email` VARCHAR(100) NOT NULL UNIQUE COMMENT '郵箱',
`phone` VARCHAR(20) NULL COMMENT '手機號',
`birthday` DATE NULL COMMENT '出生日期',
`gender` ENUM('M','F','O') NULL COMMENT '性別:M男,F女,O其他',
`balance` DECIMAL(10,2) UNSIGNED DEFAULT 0.00 COMMENT '賬戶余額',
`status` TINYINT(1) UNSIGNED DEFAULT 1 COMMENT '狀態(tài):1正常0凍結(jié)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_username` (`username`), -- 唯一約束
INDEX `idx_email` (`email`(20)), -- 前綴索引
INDEX `idx_phone` (`phone`), -- 普通索引
INDEX `idx_status` (`status`) -- 低基數(shù)索引
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci
COMMENT='平臺用戶信息表';
設(shè)計要點:
- 主鍵自增INT/BIGINT
- 密碼使用固定長度CHAR存儲哈希值
- 金額使用DECIMAL避免精度問題
- 枚舉字段使用ENUM限定值范圍
- 自動管理時間戳字段
- 為高頻查詢字段創(chuàng)建索引
四、字段約束詳解
| 約束類型 | 語法示例 | 作用說明 |
|---|---|---|
| 主鍵約束 | PRIMARY KEY (id) | 唯一標識記錄,自動創(chuàng)建聚集索引,InnoDB表必須包含主鍵 |
| 唯一約束 | UNIQUE KEY (email) | 保證列值唯一性,允許NULL值 |
| 非空約束 | NOT NULL | 插入時必須提供值,與DEFAULT配合使用 |
| 默認值 | DEFAULT 0 | 未顯式指定值時自動填充 |
| 自增長 | AUTO_INCREMENT | 整數(shù)列自動遞增(通常用于主鍵),注意并發(fā)問題 |
| 外鍵約束 | FOREIGN KEY (dept_id) REFERENCES departments(id) | 確保引用完整性,InnoDB支持 |
| 檢查約束 | CHECK (age > 0) | MySQL 8.0+支持的自定義驗證條件 |
外鍵高級用法:
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE -- 級聯(lián)刪除 ON UPDATE SET NULL -- 引用更新時置空
五、表操作命令
查看表結(jié)構(gòu)
-- 基礎(chǔ)結(jié)構(gòu) DESC users; -- 完整建表語句(含所有選項) SHOW CREATE TABLE users; -- 查看表信息 SHOW TABLE STATUS LIKE 'users';
修改表結(jié)構(gòu)
-- 添加字段 ALTER TABLE users ADD COLUMN wechat VARCHAR(30) NULL COMMENT '微信號' AFTER phone, ADD COLUMN last_login DATETIME NULL COMMENT '最后登錄時間'; -- 修改字段 ALTER TABLE users MODIFY COLUMN email VARCHAR(150) NOT NULL COMMENT '電子郵箱', CHANGE COLUMN phone mobile VARCHAR(20) NULL COMMENT '手機號碼'; -- 刪除字段 ALTER TABLE users DROP COLUMN obsolete_field; -- 添加索引 ALTER TABLE users ADD INDEX idx_wechat (wechat), ADD FULLTEXT INDEX ft_idx_username (username);
刪除表
-- 安全刪除(表不存在時不報錯) DROP TABLE IF EXISTS temp_users; -- 清空表數(shù)據(jù) TRUNCATE TABLE user_logs; -- 比DELETE更快且重置自增值
六、最佳實踐建議
命名規(guī)范
表名:
- 使用小寫字母+下劃線(snake_case)
- 多對多關(guān)系表用
relation1_relation2格式(如user_roles)
字段名:
- 避免使用數(shù)據(jù)類型作為名稱(如
text_value) - 布爾字段用
is_前綴(is_active)
- 避免使用數(shù)據(jù)類型作為名稱(如
字段設(shè)計原則
數(shù)據(jù)類型優(yōu)化:
- IP地址:建議VARCHAR(45)(兼容IPv6)
- 固定長度代碼:CHAR(2)(如國家代碼)
- JSON數(shù)據(jù):MySQL 5.7+直接使用JSON類型
特殊場景處理:
-- 軟刪除設(shè)計 ADD COLUMN is_deleted TINYINT(1) DEFAULT 0 COMMENT '是否刪除', ADD COLUMN deleted_at TIMESTAMP NULL COMMENT '刪除時間'; -- 樹形結(jié)構(gòu) ADD COLUMN parent_id INT UNSIGNED NULL COMMENT '父節(jié)點ID', ADD COLUMN tree_path VARCHAR(255) NULL COMMENT '路徑:1,5,22';
索引優(yōu)化
-- 聯(lián)合索引(注意順序) CREATE INDEX idx_name_phone ON customers(last_name, first_name, phone); -- 前綴索引(長文本字段) CREATE INDEX idx_product_desc ON products(description(20)); -- 覆蓋索引優(yōu)化 ALTER TABLE orders ADD INDEX idx_cover_user (user_id, status, create_time);
字符集統(tǒng)一
-- 創(chuàng)建數(shù)據(jù)庫時指定 CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 修改已有表字符集 ALTER TABLE products CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
七、存儲引擎選擇指南

生產(chǎn)環(huán)境建議:
- 默認使用InnoDB引擎
- 日志類表可考慮Archive引擎(如操作日志)
- 避免使用MyISAM(崩潰后易損壞且修復(fù)慢)
關(guān)鍵注意事項:
- 每個表必須包含主鍵(推薦自增INT/BIGINT)
- 時間字段使用TIMESTAMP自動管理(或DATETIME)
- 為所有字段添加COMMENT注釋
- 避免使用ENUM類型(改用關(guān)聯(lián)表或CHECK約束)
- 大字段(如TEXT/BLOB)單獨建表存儲
到此這篇關(guān)于MySQL 數(shù)據(jù)庫表創(chuàng)建的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)庫表創(chuàng)建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
- DBeaver連接本地MySQL并創(chuàng)建數(shù)據(jù)庫/表的基礎(chǔ)操作教程
- MySQL創(chuàng)建數(shù)據(jù)庫和創(chuàng)建數(shù)據(jù)表
- MySQL創(chuàng)建數(shù)據(jù)庫和創(chuàng)建數(shù)據(jù)表的操作過程
- mysql數(shù)據(jù)庫入門第一步之創(chuàng)建表
- PHP使用PDO創(chuàng)建MySQL數(shù)據(jù)庫、表及插入多條數(shù)據(jù)操作示例
- mysql中數(shù)據(jù)庫與數(shù)據(jù)表編碼格式的查看、創(chuàng)建及修改
- 用MySQL創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表代碼

