2022-02-19 18:28:59
在 MySQL 中,创建表的完整命令是 CREATE TABLE,其基本语法和完整写法如下:
CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, ... columnN datatype constraints, [additional_constraints_or_indexes]) [ENGINE=storage_engine] [CHARACTER SET charset_name] [COLLATE collation_name];核心组成部分解析表名定义
需明确指定表名(如 employees),遵循命名规范(避免特殊字符,建议小写)。
列定义
每列需指定数据类型(如 INT、VARCHAR)和约束(如 NOT NULL、UNIQUE)。
示例列:
employee_id INT AUTO_INCREMENT PRIMARY KEY:自增主键,确保唯一性。
first_name VARCHAR(50) NOT NULL:非空字符串,限制长度。
email VARCHAR(100) UNIQUE:唯一邮箱地址。
salary DECIMAL(10, 2):精确小数,适合财务数据。
附加约束与索引
可显式定义索引(如 INDEX idx_name (column_name))或外键约束(需 InnoDB 引擎支持)。
示例:CREATE TABLE employees ( employee_id INT AUTO_INCREMENT PRIMARY KEY, department_id INT, INDEX idx_department (department_id), FOREIGN KEY (department_id) REFERENCES departments(department_id));
存储引擎与字符集
存储引擎:通过 ENGINE=InnoDB(支持事务)或 ENGINE=MyISAM(读多写少场景)指定。
字符集:推荐 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 以支持多语言和表情符号。
示例:CREATE TABLE employees ( ...) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
数据类型选择
根据数据范围选择类型(如 INT 适合 21 亿以内的 ID,BIGINT 用于更大范围)。
避免过度使用 VARCHAR,合理设置长度(如 VARCHAR(100) 足够存储邮箱)。
约束优化
主键:优先使用自增列(AUTO_INCREMENT)或业务唯一标识(如订单号)。
非空约束:对关键字段(如用户名)强制 NOT NULL。
唯一约束:确保唯一性字段(如邮箱、手机号)添加 UNIQUE。
检查约束:通过 CHECK 限制数据范围(如 salary > 0)。
索引策略
为高频查询字段(如 department_id)创建索引。
避免过度索引,因写入操作需维护索引,可能降低性能。
默认值设置
为可选字段设置合理默认值(如 hire_date DATE DEFAULT (CURRENT_DATE))。
避免默认值为 NULL 的字段存储业务数据。
字符集与排序规则
统一使用 utf8mb4 以避免乱码问题。
排序规则 utf8mb4_unicode_ci 支持不区分大小写的比较。
通过合理设计 CREATE TABLE 语句,可构建高效、可扩展的数据库结构,同时避免数据冗余和性能瓶颈。