在 Mysql 里面创建表核心就是使用 create table 语句,提前选定要使用的数据库,定义表名字段名称字段类型主键约束默认值索引注释这些属性,执行 SQL 之后 Mysql 就会在当前数据库里面生成一张二维数据表,表是存储数据的基础容器,所有增删改查操作都必须建立在已经创建好的表之上,创建表的时候如果字段类型选择不合理,约束设置错误,后续会出现数据插入失败数据溢出乱码等问题,所以建表前一定要梳理业务需求,确定每一列存什么数据,是否允许为空,是否唯一,是否做主键,还要考虑字符集存储引擎,Mysql 默认存储引擎一般是 InnoDB,支持事务外键行锁,生产业务绝大多数场景都推荐使用 InnoDB,建表语句执行前要确认表名不存在,否则会报错,也可以加上判断,表已经存在就不重复创建,避免脚本执行中断。
建表前置准备
必做操作清单
1 登录 Mysql 客户端,本地命令行或者 Navicat DBeaver 这类图形工具都可以
2 使用 use 语句切换到目标数据库,没有数据库的话先 create database 创建数据库
3 确认当前账号拥有 create 建表权限,普通业务账号如果没有权限需要找管理员授权
4 规划表结构,确认表名字段名字段类型约束,表名建议小写,不要使用 Mysql 保留关键字
常用字段类型对照表
| 类型分类 | 类型名称 | 适用场景 |
|---|---|---|
| 整数型 | int bigint tinyint smallint | 存编号年龄数量,bigint 适合自增主键 |
| 浮点型 | decimal float double | 金额推荐 decimal,避免浮点精度丢失 |
| 字符串 | varchar char text | varchar 可变长度,char 定长,text 存长文本 |
| 日期时间 | datetime date timestamp | datetime 存年月日时分秒,timestamp 自动随时区变化 |
| 布尔 | bit tinyint | Mysql 没有原生 boolean,一般用 tinyint 0 和 1 表示 |
基础建表语法步骤
1 基础语法格式 create table 表名 括号里面写字段定义和约束,最后可以指定存储引擎字符集注释
2 最简示例,创建用户表,id 作为主键自增,name 为 varchar 类型,age 为 int 类型
3 执行这条 SQL 语句,执行成功之后,使用 show tables 查看当前数据库所有表,确认表已经创建出来
4 使用 desc 表名查看表结构,可以看到每一列字段类型是否为空主键默认值这些信息
进阶建表核心约束说明
1 主键 primary key,唯一标识一行数据,不能为空不能重复,自增 auto_increment 一般搭配主键使用,插入数据不传 id 的时候自动累加
2 not null 非空约束,该字段插入数据的时候必须传值,不允许空值
3 default 默认值,插入数据如果不写这个字段,自动填充设置好的默认值
4 unique 唯一约束,字段里面的值不能重复,比如手机号邮箱
5 comment 注释,给字段和表增加中文说明,方便后期维护,生产建表强烈建议加上
6 engine 存储引擎,建表末尾写 engine=InnoDB,charset=utf8mb4,utf8mb4 支持中文和 emoji,不要使用旧的 utf8
7 if not exists 判断,create table if not exists 表名,意思是如果表不存在才创建,已经存在就跳过不报错,适合脚本批量执行
高级建表方式
1 复制已有表结构创建新表,create table 新表名 like 旧表名,这种方式只复制表结构主键索引,不会复制原有表里面的数据
2 建表同时复制数据,create table 新表名 as select 字段 from 旧表名,这种方式会复制数据,但是主键自增索引约束不会完整继承,这点很容易踩坑
3 临时表创建,create temporary table,临时表只在当前会话生效,会话断开自动删除,适合临时计算中间数据
4 分区表创建,大数据量场景可以在建表的时候定义分区,按时间或者范围拆分数据,提升大数据查询性能,需要理解分区规则,维护复杂度更高
建表之后校验与修改
1 show create table 表名,可以查看完整原始建表 SQL 语句,方便备份和迁移
2 如果建表之后需要调整,使用 alter table 修改,比如新增字段修改字段类型删除字段修改主键
3 确认字符集,登录执行 show table status like 表名,核对表的字符集和排序规则,防止后续中文乱码
【常见问题】
问题 1 Mysql 中怎么用创建表的时候提示表已经存在怎么办
回答 1 Mysql 中怎么用创建表出现表已存在报错,可以在 create table 语句后面增加 if not exists 参数,表已经存在的时候就跳过创建不会报错,也可以先 drop table 删除旧表再重新创建表,删除表会清空原有数据,操作前一定要备份。
问题 2 Mysql 中怎么用创建表设置主键自增
回答 2 Mysql 中怎么用创建表设置主键自增,在建表字段定义里面给主键字段加上 primary key 和 auto_increment,主键字段必须是整数类型,执行建表 SQL 之后插入数据不需要手动填写 id,Mysql 会自动生成递增编号。
问题 3 Mysql 中怎么用创建表的时候字段类型选 varchar 还是 char
回答 3 Mysql 中怎么用创建表选择 varchar 适合长度不固定的字符串,比如用户名地址,char 适合长度固定的数据,比如手机号身份证号,varchar 会节省存储空间,char 查询速度略快,业务大部分场景优先选择 varchar。
问题 4 Mysql 中怎么用创建表之后怎么查看完整建表语句
回答 4 Mysql 中怎么用创建表完成之后,执行 show create table 加表名这条 SQL,就可以输出这张表完整原始建表 SQL,包含存储引擎字符集主键索引注释,常用于表结构迁移和备份。
【免责申明】
本文 Mysql 中怎么用创建表相关内容仅用于技术学习参考,不同 Mysql 版本语法细节存在差异,建表以及后续修改表结构会影响业务数据,操作前请做好数据备份,因自行执行 SQL 导致数据损坏业务中断,相关风险由操作者自行承担,本文不承担任何相关责任。


