逐行填字段,点「添加字段」继续加。主键与自增一般配合使用:主键列选 bigint 并勾源自增。生成语句默认带 utf8mb4 字符集与 InnoDB 引擎,避免中文与表情符号乱码。
| 字段名 | 类型 | 长度 | 主键 | 自增 | 非空 | 默认值 | 注释 | 操作 |
|---|
工具说明
手写建表语句最容易漏掉三件事:字符集、注释、索引。漏字符集导致中文存进去变问号,漏注释导致半年后没人知道这个字段是干什么的,漏索引导致上线后查询慢。本工具把这些都放进生成模板里。
字段类型怎么选
- 主键:建议用 bigint 并开启自增。int 在数据量大的表上会提前耗尽,而 uuid 做主键会影响插入性能与索引体积。
- 金额:用 decimal 指定精度,不要用 float 或 double——浮点数在金额计算上会出现精度误差。
- 短文本:用 varchar 并给合理长度。长度既影响索引大小也影响内存占用,不要一律写 255。
- 长文本:用 text 或 longtext。注意 text 类型不能直接建普通索引,需要指定前缀长度。
- 时间:用 datetime 或 timestamp 并开启默认当前时间。两者区别是 timestamp 有 2038 年上限且受时区影响。
三条建表规范
- 字符集统一 utf8mb4:utf8 在 MySQL 里其实只有三个字节,存不了 emoji 与部分生僻字。新表一律用 utf8mb4。
- 每张表都要有主键:没有主键的表在主从复制与在线变更时会有额外麻烦,即使业务上不需要唯一标识也应该加一个自增列。
- 注释写到字段上:字段注释是团队协作里性价比最高的文档,因为写代码时鼠标一悬停就能看到。
关于 DROP TABLE
默认不生成删除语句,避免误执行导致数据丢失。只有在初始化脚本、测试环境重建这类明确场景下才打开。生产环境执行任何 DDL 之前,请先确认已备份。
你可能还想问
为什么中文存进去变成问号?
因为字符集不是 utf8mb4。MySQL 里的 utf8 最多只有三个字节,中文常用字能存但 emoji 与部分生僻字存不了,会变成问号或被截断。解决方案是把库、表、连接三处的字符集统一成 utf8mb4,其中连接字符集最容易被漏掉——它是客户端与服务端协商时决定的,只在建表时设置好还不够。
主键用 int 还是 bigint?
建议 bigint。int 无符号的上限大约 42 亿,看似很多,但如果表里用自增主键并且有删除重建,或者业务量增长快,是有可能触顶的。而一旦主键类型需要从 int 改成 bigint,在有数据的大表上属于高成本操作。新表直接用 bigint 更省心,代价只是每行多 4 字节。
自增主键会不会在分布式环境下冲突?
单库单表不会,多库多表或分库分表会。这种情况下常见做法是:用号段模式让不同实例领取不同的自增区间,或者改用雪花算法生成有序的唯一 ID,或者把主键类型换成字符串用 UUID——但 UUID 作为聚簇索引主键会带来写入性能下降与索引膨胀的问题,需要权衡。
decimal 的精度该怎么写?
常用写法是 decimal(总位数, 小数位数)。金额场景通常用 decimal(10,2) 表示最多八位整数两位小数,上限约一千万,够绝大多数业务;如果涉及更大金额用 decimal(16,2) 或更高。注意第一个参数是总位数,不是整数位数,写成 decimal(2,10) 是非法的。
速查在线工具箱