欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 數(shù)據(jù)庫(kù)表創(chuàng)建過(guò)程

 更新時(shí)間:2025年07月25日 11:13:08   作者:m0_75107803  
這篇文章主要介紹了MySQL 數(shù)據(jù)庫(kù)表創(chuàng)建過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

MySQL 數(shù)據(jù)庫(kù)表創(chuàng)建詳解

一、核心語(yǔ)法結(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ù)說(shuō)明:

  • IF NOT EXISTS:可選,避免表已存在時(shí)報(bào)錯(cuò)
  • table_name:表名,遵循命名規(guī)范(建議小寫+下劃線)
  • column_constraints:字段級(jí)約束(如NOT NULL、DEFAULT等)
  • table_constraints:表級(jí)約束(如PRIMARY KEY、FOREIGN KEY等)
  • storage_engine:指定存儲(chǔ)引擎(如InnoDB、MyISAM)
  • charset_name:字符集(推薦utf8mb4支持emoji)
  • collation_name:排序規(guī)則(影響字符串比較)
  • table_comment:表注釋,強(qiáng)烈建議添加

二、關(guān)鍵組件解析

字段定義 (field)

column_name datatype [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] [UNIQUE] [PRIMARY KEY] [COMMENT 'string']

詳細(xì)規(guī)則:

  • 命名規(guī)則

    • 允許字符:字母(a-z)、數(shù)字(0-9)、美元符($)、下劃線(_)
    • 長(zhǎng)度限制:不超過(guò)64個(gè)字符
    • 避免使用: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í)間'

數(shù)據(jù)類型 (datatype)

類別常用類型說(shuō)明
整數(shù)INT, TINYINT, BIGINT可選UNSIGNED(無(wú)符號(hào)整數(shù)),如TINYINT UNSIGNED范圍0-255
浮點(diǎn)數(shù)FLOAT, DOUBLE, DECIMALDECIMAL(10,2)固定精度,適合金額存儲(chǔ)
字符串VARCHAR(255), CHAR(1)VARCHAR按需分配空間,CHAR固定長(zhǎng)度
日期DATE, DATETIME, TIMESTAMPTIMESTAMP自動(dòng)時(shí)區(qū)轉(zhuǎn)換(1970-2038年),DATETIME支持更大范圍
大文本TEXT, LONGTEXTTEXT約64KB,LONGTEXT約4GB,適合存儲(chǔ)JSON/HTML內(nèi)容
二進(jìn)制BLOB, LONGBLOB通常只存儲(chǔ)文件路徑而非實(shí)際二進(jìn)制數(shù)據(jù)

選型建議

  • 狀態(tài)字段:TINYINT
  • 用戶ID:INT UNSIGNED或BIGINT UNSIGNED
  • 用戶名:VARCHAR(20-50)
  • 密碼哈希:CHAR(60)(適合Bcrypt固定長(zhǎng)度哈希值)
  • 金額:DECIMAL(10,2)
  • 文章內(nèi)容:LONGTEXT

字符集與校對(duì)規(guī)則

優(yōu)先級(jí)順序:字段級(jí) > 表級(jí) > 數(shù)據(jù)庫(kù)級(jí) > 服務(wù)器級(jí)

推薦設(shè)置

CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

字符集對(duì)比

  • utf8:基本多語(yǔ)言平面(3字節(jié)/字符)
  • utf8mb4:完整Unicode(4字節(jié)/字符),支持emoji表情

常用校對(duì)規(guī)則

  • utf8mb4_general_ci:簡(jiǎn)單排序規(guī)則
  • utf8mb4_unicode_ci:準(zhǔn)確Unicode排序(推薦)
  • utf8mb4_bin:二進(jìn)制比較(區(qū)分大小寫)

存儲(chǔ)引擎 (ENGINE)

引擎關(guān)鍵特性適用場(chǎng)景
InnoDB事務(wù)支持、行級(jí)鎖、外鍵約束交易系統(tǒng)、需要ACID特性的表(默認(rèn))
MyISAM表級(jí)鎖、全文索引、高讀取性能數(shù)據(jù)倉(cāng)庫(kù)、日志表(MySQL 5.7前)
MEMORY內(nèi)存存儲(chǔ)、極速訪問(wèn)、重啟數(shù)據(jù)丟失臨時(shí)會(huì)話表、高速緩存
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字符長(zhǎng)度
    `email` VARCHAR(100) NOT NULL UNIQUE COMMENT '郵箱',
    `phone` VARCHAR(20) NULL COMMENT '手機(jī)號(hào)',
    `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)建時(shí)間',
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
    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='平臺(tái)用戶信息表';

設(shè)計(jì)要點(diǎn)

  1. 主鍵自增INT/BIGINT
  2. 密碼使用固定長(zhǎng)度CHAR存儲(chǔ)哈希值
  3. 金額使用DECIMAL避免精度問(wèn)題
  4. 枚舉字段使用ENUM限定值范圍
  5. 自動(dòng)管理時(shí)間戳字段
  6. 為高頻查詢字段創(chuàng)建索引

四、字段約束詳解

約束類型語(yǔ)法示例作用說(shuō)明
主鍵約束PRIMARY KEY (id)唯一標(biāo)識(shí)記錄,自動(dòng)創(chuàng)建聚集索引,InnoDB表必須包含主鍵
唯一約束UNIQUE KEY (email)保證列值唯一性,允許NULL值
非空約束NOT NULL插入時(shí)必須提供值,與DEFAULT配合使用
默認(rèn)值DEFAULT 0未顯式指定值時(shí)自動(dòng)填充
自增長(zhǎng)AUTO_INCREMENT整數(shù)列自動(dòng)遞增(通常用于主鍵),注意并發(fā)問(wèn)題
外鍵約束FOREIGN KEY (dept_id) REFERENCES departments(id)確保引用完整性,InnoDB支持
檢查約束CHECK (age > 0)MySQL 8.0+支持的自定義驗(yàn)證條件

外鍵高級(jí)用法

FOREIGN KEY (user_id) 
REFERENCES users(id)
ON DELETE CASCADE   -- 級(jí)聯(lián)刪除
ON UPDATE SET NULL  -- 引用更新時(shí)置空

五、表操作命令

查看表結(jié)構(gòu)

-- 基礎(chǔ)結(jié)構(gòu)
DESC users;

-- 完整建表語(yǔ)句(含所有選項(xiàng))
SHOW CREATE TABLE users;

-- 查看表信息
SHOW TABLE STATUS LIKE 'users';

修改表結(jié)構(gòu)

-- 添加字段
ALTER TABLE users 
  ADD COLUMN wechat VARCHAR(30) NULL COMMENT '微信號(hào)' AFTER phone,
  ADD COLUMN last_login DATETIME NULL COMMENT '最后登錄時(shí)間';
-- 修改字段
ALTER TABLE users
  MODIFY COLUMN email VARCHAR(150) NOT NULL COMMENT '電子郵箱',
  CHANGE COLUMN phone mobile VARCHAR(20) NULL COMMENT '手機(jī)號(hào)碼';
-- 刪除字段
ALTER TABLE users
  DROP COLUMN obsolete_field;
-- 添加索引
ALTER TABLE users
  ADD INDEX idx_wechat (wechat),
  ADD FULLTEXT INDEX ft_idx_username (username);

刪除表

-- 安全刪除(表不存在時(shí)不報(bào)錯(cuò))
DROP TABLE IF EXISTS temp_users;
-- 清空表數(shù)據(jù)
TRUNCATE TABLE user_logs;  -- 比DELETE更快且重置自增值

六、最佳實(shí)踐建議

命名規(guī)范

  1. 表名

    • 使用小寫字母+下劃線(snake_case)
    • 多對(duì)多關(guān)系表用relation1_relation2格式(如user_roles
  2. 字段名

    • 避免使用數(shù)據(jù)類型作為名稱(如text_value
    • 布爾字段用is_前綴(is_active

字段設(shè)計(jì)原則

  1. 數(shù)據(jù)類型優(yōu)化

    • IP地址:建議VARCHAR(45)(兼容IPv6)
    • 固定長(zhǎng)度代碼:CHAR(2)(如國(guó)家代碼)
    • JSON數(shù)據(jù):MySQL 5.7+直接使用JSON類型
  2. 特殊場(chǎng)景處理

    -- 軟刪除設(shè)計(jì)
    ADD COLUMN is_deleted TINYINT(1) DEFAULT 0 COMMENT '是否刪除',
    ADD COLUMN deleted_at TIMESTAMP NULL COMMENT '刪除時(shí)間';
    -- 樹形結(jié)構(gòu)
    ADD COLUMN parent_id INT UNSIGNED NULL COMMENT '父節(jié)點(diǎn)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);
-- 前綴索引(長(zhǎng)文本字段)
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ù)庫(kù)時(shí)指定
CREATE DATABASE myapp 
  DEFAULT CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;
-- 修改已有表字符集
ALTER TABLE products CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

七、存儲(chǔ)引擎選擇指南

生產(chǎn)環(huán)境建議

  1. 默認(rèn)使用InnoDB引擎
  2. 日志類表可考慮Archive引擎(如操作日志)
  3. 避免使用MyISAM(崩潰后易損壞且修復(fù)慢)

關(guān)鍵注意事項(xiàng)

  1. 每個(gè)表必須包含主鍵(推薦自增INT/BIGINT)
  2. 時(shí)間字段使用TIMESTAMP自動(dòng)管理(或DATETIME)
  3. 為所有字段添加COMMENT注釋
  4. 避免使用ENUM類型(改用關(guān)聯(lián)表或CHECK約束)
  5. 大字段(如TEXT/BLOB)單獨(dú)建表存儲(chǔ)

到此這篇關(guān)于MySQL 數(shù)據(jù)庫(kù)表創(chuàng)建的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)庫(kù)表創(chuàng)建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL系列之五 視圖、存儲(chǔ)函數(shù)、存儲(chǔ)過(guò)程、觸發(fā)器

    MySQL系列之五 視圖、存儲(chǔ)函數(shù)、存儲(chǔ)過(guò)程、觸發(fā)器

    視圖就是一條select語(yǔ)句執(zhí)行后返回的結(jié)果集;觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫(kù)對(duì)象,在滿足定義條件時(shí)觸發(fā),并執(zhí)行觸發(fā)器中定義的語(yǔ)句集合;函數(shù)存儲(chǔ)著一系列sql語(yǔ)句,調(diào)用函數(shù)就是一次性執(zhí)行這些語(yǔ)句,而存儲(chǔ)過(guò)程就是一組可編程的函數(shù),需要的朋友可以參考下
    2021-07-07
  • MySQL事務(wù)控制流與ACID特性

    MySQL事務(wù)控制流與ACID特性

    本文將會(huì)介紹 MySQL 的事務(wù) ACID 特性和 MySQL 事務(wù)控制流程的語(yǔ)法,并介紹事務(wù)并發(fā)處理中可能出現(xiàn)的異常情況,比如臟讀、幻讀、不可重復(fù)讀等等,最后介紹事務(wù)隔離級(jí)別。感興的小伙伴可以一起來(lái)學(xué)習(xí)
    2021-08-08
  • MySQL自增ID用完了的四種解決方式

    MySQL自增ID用完了的四種解決方式

    這篇文章主要介紹了MySQL自增ID用完了的四種解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • MySQL常用基本SQL語(yǔ)句總結(jié)

    MySQL常用基本SQL語(yǔ)句總結(jié)

    這篇文章主要介紹了MySQL常用基本SQL語(yǔ)句總結(jié) 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Mysql DDL常見(jiàn)操作匯總

    Mysql DDL常見(jiàn)操作匯總

    這篇文章主要介紹了Mysql DDL常見(jiàn)操作匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MySql登錄時(shí)閃退的快速解決辦法

    MySql登錄時(shí)閃退的快速解決辦法

    這篇文章主要介紹了MySql登錄時(shí)閃退的快速解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • mysql自定義排序順序語(yǔ)句

    mysql自定義排序順序語(yǔ)句

    這篇文章主要介紹了mysql 自定義排序順序,在sql語(yǔ)句中加入ORDER BY FIELD,需要的朋友可以參考下
    2014-02-02
  • Mysql?索引?BTree?與?B+Tree?的區(qū)別(面試)

    Mysql?索引?BTree?與?B+Tree?的區(qū)別(面試)

    這篇文章主要介紹了Mysql索引BTree與B+Tree的區(qū)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • MySQL數(shù)據(jù)庫(kù)遷移全過(guò)程

    MySQL數(shù)據(jù)庫(kù)遷移全過(guò)程

    本文詳細(xì)解析了MySQL數(shù)據(jù)庫(kù)遷移的整個(gè)過(guò)程,包括準(zhǔn)備工作、遷移方法、注意事項(xiàng)和優(yōu)缺點(diǎn),文章介紹了三種常見(jiàn)的遷移方法:使用mysqldump導(dǎo)出和導(dǎo)入、使用ibd文件遷移和使用目錄整體遷移,每種方法都有其優(yōu)缺點(diǎn),選擇合適的方法取決于具體的遷移需求和環(huán)境
    2025-02-02
  • 關(guān)于MySQL innodb_autoinc_lock_mode介紹

    關(guān)于MySQL innodb_autoinc_lock_mode介紹

    下面小編就為大家?guī)?lái)一篇關(guān)于MySQL innodb_autoinc_lock_mode介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03

最新評(píng)論