sql 数据库创建表核心就是使用 create table 语句,定义表名称,每一列的字段名 数据类型 约束条件,执行之后数据库就会生成一张空数据表,创建表属于 DDL 数据定义语言操作,创建之前必须先选中对应的数据库,不能在没有选择库的状态下直接建表,不同数据库比如 MySQL SQLite SQLServer Oracle 基础语法大体一致,但是自增主键 引擎 字符集 字段注释写法会有差别,新手最容易出错的地方就是标点全部要使用英文半角符号,字段类型选错,主键忘记设置,还有建表之后没有校验表结构,建表的时候可以提前加上主键 非空 默认值 唯一约束,这些约束可以从源头保证数据规范,后续写业务增删改查的时候数据不容易出现脏数据,建表既可以在命令行执行 SQL,也可以在 DBeaver SQLyog Navicat 这类可视化客户端里面新建查询窗口执行语句,可视化工具还支持鼠标拖拽方式建表,但是底层本质还是自动生成 create table 语句,推荐新手优先手写 SQL,理解建表逻辑,后续做业务表设计会更加扎实。
建表前置准备
1 确认数据库已经正常启动,客户端可以成功连接数据库
2 提前设计好业务表,梳理字段清单,确定每个字段用途,数据类型,主键,是否允许为空,是否需要默认值
3 确认数据库类型,MySQL 建表可以指定引擎和字符集,SQLServer Oracle 没有这个写法
4 切换到目标数据库,MySQL 使用 use 数据库名,SQLServer 需要指定当前数据库上下文,防止表创建到错误的系统库里面
MySQL 标准建表完整步骤
第一步 打开查询窗口或者命令行,切换数据库 use test_db
第二步 编写 create table 语句,定义表名和全部字段,加上主键约束
第三步 执行 SQL 语句,如果没有报错,代表表创建成功
第四步 校验表结构,MySQL 使用 desc 表名,或者 show create table 表名,查看完整建表语句
第五步 可选追加操作,后续如果需要增加索引,使用 create index,或者使用 alter table 补充外键约束
MySQL 建表示例
create table student
id int primary key auto_increment,
name varchar 50 not null,
age tinyint,
address varchar 100,
create_time datetime
engine InnoDB default charset utf8mb4
常用字段数据类型参考表格
| 类型 | 用途 | 适用场景 |
|---|---|---|
| int | 整数 | 编号 数量 |
| varchar | 变长文本 | 姓名 地址 |
| char | 定长文本 | 编码 固定长度字段 |
| decimal | 精确小数 | 金额,避免浮点误差 |
| datetime | 日期时间 | 创建时间 更新时间 |
| text | 长文本 | 备注 大段文字 |
| blob | 二进制 | 图片 文件二进制 |
常用约束说明
primary key 主键,唯一并且非空,一张表只能有一个主键
not null 非空,该字段不允许插入空值
unique 唯一约束,字段值不能重复
default 默认值,插入数据没有填写该字段自动填充默认值
foreign key 外键,关联另外一张表主键,维护表之间引用完整性
可视化客户端建表方式
打开 SQLyog 或者 DBeaver,找到目标数据库,右键数据表,选择新建表,在界面里面添加字段,设置类型 主键 非空属性,填写表名,点击保存,软件会自动生成对应的 create table SQL,这种方式适合不熟悉手写 SQL 的新手,但是依然建议看懂底层生成的 SQL 代码。
常见报错排查
表已经存在报错,说明同名表已经创建,可以加上 if not exists,create table if not exists,避免重复建表报错
字段类型不兼容,比如金额字段使用 float,后续出现精度丢失,金额统一改用 decimal
中文乱码,MySQL 建表没有指定 utf8mb4 字符集,后续中文存入出现乱码
语法报错,绝大多数是中文逗号中文括号,或者字段名和关键字冲突,字段名是关键字的时候需要加反引号
进阶补充
如果建表之后需要修改表结构,使用 alter table,可以新增字段 修改字段类型 删除字段,但是 Oracle 和 SQLServer 部分修改操作限制更多,如果是大批量迁移表,也可以使用 create table as select 方式,复制旧表结构和数据快速生成新表。
【常见问题】
问题 1 sql 数据库怎么创建表的时候设置自增主键
回答 1 sql 数据库怎么创建表,MySQL 里面建表的时候写 int primary key auto_increment 就可以实现自增主键,sql 数据库怎么创建表的时候不同数据库自增语法不一样,SQLServer 是 identity,Oracle 需要序列实现自增。
问题 2 sql 数据库怎么创建表提示表已经存在怎么办
回答 2 sql 数据库怎么创建表,出现表已经存在报错,可以在建表语句增加 if not exists,sql 数据库怎么创建表这个参数会判断,如果表已经存在就跳过建表,不会抛出错误。
问题 3 sql 数据库怎么创建表必须要设置主键吗
回答 3 sql 数据库怎么创建表不是强制要求主键,但是业务表强烈建议设置主键,sql 数据库怎么创建表设置主键之后方便数据定位,提升关联查询性能,保证每行数据唯一。
问题 4 sql 数据库怎么创建表之后怎么查看表结构
回答 4 sql 数据库怎么创建表完成之后,MySQL 可以使用 desc 表名查看简表结构,或者 show create table 表名查看完整建表 SQL,sql 数据库怎么创建表之后校验结构是非常重要的一步。
【免责申明】
本内容为 SQL 建表通用教程,不同数据库版本语法存在差异,生产环境建表前做好业务设计评审,语句执行前确认数据库环境,内容仅用于学习参考,不保证所有数据库完全兼容。
