MySQL 创建数据库表的规范写法
在MySQL中创建数据库表需要遵循一定的规范,以下是一个标准的建表语句示例及其规范说明:
基本建表语法
CREATE TABLE [IF NOT EXISTS] `数据库名`.`表名` (
`字段名1` 数据类型 [约束条件] [COMMENT '字段注释'],
`字段名2` 数据类型 [约束条件] [COMMENT '字段注释'],
...
[PRIMARY KEY (`主键字段名`)]
[INDEX `索引名` (`字段名` [ASC|DESC])]
[UNIQUE INDEX `索引名` (`字段名`)]
[FOREIGN KEY (`外键字段名`) REFERENCES `关联表名`(`关联字段名`)]
) ENGINE=存储引擎 DEFAULT CHARSET=字符集 COLLATE=排序规则 [COMMENT='表注释'];
规范写法示例
CREATE TABLE IF NOT EXISTS `shop`.`user` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` char(60) NOT NULL COMMENT '密码(加密存储)',
`email` varchar(100) NOT NULL COMMENT '电子邮箱',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号码',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0-禁用,1-正常)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_email` (`email`),
KEY `idx_phone` (`phone`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
规范要点说明
-
命名规范:
- 表名和字段名使用小写字母,单词间用下划线分隔或直接连接
- 使用反引号(`)包裹标识符,避免与关键字冲突
- 索引名使用前缀表明类型:
uk_
(键)、idx_
(普通索引)、fk_
(外键)
-
数据类型选择:
- 整型:根据范围选择TINYINT/SMALLINT/INT/BIGINT
- 字符串:定长用CHAR,变长用VARCHAR,大文本用TEXT
- 时间:DATETIME或TIMESTAMP
-
约束条件:
- NOT NULL:非空约束
- DEFAULT:默认值
- AUTO_INCREMENT:自增
- PRIMARY KEY:主键
- UNIQUE KEY:约束
- FOREIGN KEY:外键约束(注意性能影响)
-
表选项:
- ENGINE:推荐InnoDB(支持事务)
- CHARSET:推荐utf8mb4(支持完整Unicode)
- COLLATE:推荐utf8mb4_unicode_ci(不区分大小写)
-
注释:
- 表和字段都应添加COMMENT注释
-
索引:
- 主键必须
- 常用查询条件建索引
- 字段建索引
实践
- 每个表必须有主键,推荐使用自增ID
- 避免使用NULL,尽量设置DEFAULT值
- 时间字段推荐使用
DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
- 大字段(TEXT/BLOB)单独建表
- 考虑未来扩展性,避免过度设计
通过遵循这些规范,可以创建出结构清晰、性能良好的数据库表。