在mysql数据库的日常使用中,CREATE TABLE是创建数据表的核心SQL语句,通过它可以定义表的字段名称、数据类型、约束条件以及存储引擎等核心属性,是后续数据存储和查询的基础。

CREATE TABLE基础语法
CREATE TABLE的基本语法结构如下,其中方括号包裹的内容为可选参数:
CREATE TABLE [IF NOT EXISTS] 表名 (
字段名1 数据类型 [约束条件],
字段名2 数据类型 [约束条件],
...
[表级约束条件]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集];
各参数含义说明:
- IF NOT EXISTS:可选参数,当表不存在时才执行创建操作,避免表已存在时报错
- 表名:需要创建的表的名称,建议符合命名规范,不要使用mysql关键字
- 字段定义:每个字段需要指定名称和数据类型,可选添加字段级约束
- 表级约束:可选,用于定义多个字段联合的约束,比如联合主键、联合唯一约束等
- ENGINE:可选,指定表的存储引擎,常用InnoDB、MyISAM等
- DEFAULT CHARSET:可选,指定表的默认字符集,常用utf8mb4支持更多字符
常用数据类型与约束
常见数据类型
mysql中常用的字段数据类型可以分为以下几类:
| 类型分类 | 具体类型 | 说明 |
|---|---|---|
| 整数类型 | INT, BIGINT, SMALLINT | 分别存储不同范围的整数,BIGINT可存储更大范围的整数值 |
| 字符串类型 | VARCHAR, CHAR, TEXT | VARCHAR为变长字符串,CHAR为定长字符串,TEXT存储长文本 |
| 日期时间类型 | DATE, DATETIME, TIMESTAMP | 分别存储日期、日期时间、时间戳类型数据 |
| 浮点类型 | DECIMAL, FLOAT, DOUBLE | DECIMAL适合存储精确数值,比如金额类数据 |
常用约束条件
约束用于保证表中数据的完整性和准确性,常用的约束包括:
- PRIMARY KEY:主键约束,唯一标识表中的每一条记录,不允许为空且值唯一
- NOT NULL:非空约束,字段值不允许为NULL
- UNIQUE:唯一约束,字段值在整个表中唯一,允许为空
- AUTO_INCREMENT:自增约束,通常用于整数类型主键,插入数据时自动生成递增的值
- DEFAULT:默认值约束,当插入数据未指定该字段值时,使用默认值
- FOREIGN KEY:外键约束,用于关联其他表的主键,保证参照完整性
实际建表示例
示例1:创建简单用户表
创建一个存储用户基础信息的表,包含用户ID、用户名、密码、注册时间字段:
-- 创建用户表,使用InnoDB引擎,字符集为utf8mb4
CREATE TABLE IF NOT EXISTS user (
user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID,自增主键',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名,唯一非空',
password VARCHAR(100) NOT NULL COMMENT '用户密码',
register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间,默认当前时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
示例2:创建带外键的订单表
创建订单表,关联上面的用户表,每个订单属于一个用户:
-- 创建订单表,外键关联用户表的user_id
CREATE TABLE IF NOT EXISTS order_info (
order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID',
user_id INT NOT NULL COMMENT '下单用户ID',
order_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
order_status TINYINT DEFAULT 0 COMMENT '订单状态,0待支付,1已支付',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '订单创建时间',
-- 表级外键约束,关联user表的user_id
FOREIGN KEY (user_id) REFERENCES user(user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
示例3:创建联合主键的表
创建学生选课关系表,使用学生ID和课程ID作为联合主键:
-- 创建选课表,联合主键为student_id和course_id
CREATE TABLE IF NOT EXISTS student_course (
student_id INT NOT NULL COMMENT '学生ID',
course_id INT NOT NULL COMMENT '课程ID',
score DECIMAL(5,2) COMMENT '课程成绩',
-- 表级联合主键约束
PRIMARY KEY (student_id, course_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
建表注意事项
- 表名和字段名尽量不要使用mysql的保留关键字,比如
order、user等,如果必须使用需要用反引号包裹,比如`order` - 选择存储引擎时,如果需要事务支持、外键约束,优先选择InnoDB引擎,它是mysql默认的存储引擎
- 字符集建议统一使用utf8mb4,支持emoji等特殊字符,避免后续出现乱码问题
- 每个字段建议添加注释,说明字段的用途,方便后续维护和他人理解表结构
- 自增字段一般作为主键使用,且一张表只能有一个自增字段
- 创建外键时,关联的字段必须是被关联表的主键或者唯一索引,且两个字段的数据类型必须一致
查看与验证表结构
表创建完成后,可以使用以下语句查看表的结构是否正确:
-- 查看user表的表结构 DESC user; -- 查看创建表的完整SQL语句 SHOW CREATE TABLE user;
通过DESC语句可以看到每个字段的名称、类型、是否允许为空、键类型、默认值等信息,通过SHOW CREATE TABLE可以看到完整的建表语句,包括存储引擎、字符集等属性,方便核对是否符合预期。
mysqlCREATE_TABLE数据库表SQL语句修改时间:2026-06-11 07:09:32