最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
MySQL如何使用CREATE TABLE创建业务表?
时间:2026-08-31 08:29:49 编辑:袖梨 来源:一聚教程网
必须先执行USE数据库,否则报错;建表需显式指定ENGINE=InnoDB、DEFAULT CHARSET=utf8mb4及COLLATE;字段应合理组合NOT NULL与DEFAULT;AUTO_INCREMENT须配合主键或唯一键;注释须位置正确且必要。
必须先 use 数据库,否则报错 ERROR 1046 (3D000): No database selected
MySQL 不允许在未选定数据库上下文时直接建表。你执行 CREATE TABLE users (...) 前,必须先运行 USE myapp_db;(把 myapp_db 换成你的真实库名)。这个步骤不是可选的——它决定了表最终落在哪个物理库目录下。漏掉这句,所有后续字段定义、引擎设置都无效,连错误提示都不会指向语法本身,容易误判。
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 必须显式写
MySQL 8.0+ 虽默认用 InnoDB 和 utf8mb4,但线上环境不能依赖“默认”。老版本可能仍是 MyISAM,字符集可能是 latin1,存中文直接乱码;某些运维脚本或容器镜像还会覆盖全局配置。显式声明能锁死行为,避免迁移、备份还原或跨环境部署时出问题。
-
ENGINE=InnoDB:支持事务、行锁、外键,业务表几乎都该用它 -
DEFAULT CHARSET=utf8mb4:只有 utf8mb4 才真正支持 emoji 和生僻汉字(utf8 是别名,实际是 utf8mb3) -
COLLATE=utf8mb4_0900_ai_ci:MySQL 8.0+ 推荐的排序规则,大小写不敏感且带音调忽略(ai= accent insensitive)
字段定义里别漏掉 NOT NULL 和 DEFAULT 的组合陷阱
比如想让 status 字段默认为 'active',写成 status VARCHAR(20) DEFAULT 'active' 看似没问题,但如果没加 NOT NULL,插入时传 NULL 就真存进去了——而业务逻辑往往假设它总有值。反过来,加了 NOT NULL 却没设 DEFAULT,又会导致 INSERT 不带该字段时报错。
- 推荐模式:
status VARCHAR(20) NOT NULL DEFAULT 'active' - 时间字段用
CURRENT_TIMESTAMP仅限TIMESTAMP或DATETIME类型,INT或VARCHAR上写DEFAULT NOW()会直接报错 -
AUTO_INCREMENT必须配合PRIMARY KEY或UNIQUE KEY,单独写无效
表和字段注释要写,但 COMMENT 位置有讲究
字段注释必须紧跟在该字段定义末尾,写在括号里;表注释得放在整个语句最后,用 COMMENT='用户主表'。顺序错了 MySQL 会报语法错误,而不是忽略。
示例正确写法:
CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',name VARCHAR(50) NOT NULL COMMENT '真实姓名',created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主表';
注释不是装饰,它是后期排查字段含义、生成文档、对接 ORM 的第一手依据。没注释的表,三个月后连你自己都得翻代码猜 flag1 是干啥的。
相关文章
- TPLink TLWDR7500 无线路由器WDS桥接设置 08-31
- .net 3.5离线安装包 sources\sxs安装与报错处理 08-31
- php是什么 有什么用途和如何学 08-31
- 狗狗名字女孩12个推荐:甜美温柔又好叫 08-31
- TPLink TLWDR7800 无线路由器网速限制 08-31
- 安卓java模拟器下载按文件类型选工具与导入排错 08-31