8人参与 • 2025-07-25 • Mysql
create table [if not exists] table_name ( column1 datatype [column_constraints], column2 datatype [column_constraints], ... [table_constraints] ) [engine = storage_engine] [default] character set charset_name [collate collation_name] [comment 'table_comment'];
参数说明:
if not exists
:可选,避免表已存在时报错table_name
:表名,遵循命名规范(建议小写+下划线)column_constraints
:字段级约束(如not null、default等)table_constraints
:表级约束(如primary key、foreign key等)storage_engine
:指定存储引擎(如innodb、myisam)charset_name
:字符集(推荐utf8mb4支持emoji)collation_name
:排序规则(影响字符串比较)table_comment
:表注释,强烈建议添加column_name datatype [not null] [default value] [auto_increment] [unique] [primary key] [comment 'string']
详细规则:
命名规则:
完整示例:
id int unsigned not null auto_increment primary key comment '主键id', username varchar(30) not null unique comment '用户名', status tinyint(1) default 1 comment '状态:1启用0禁用', created_at timestamp default current_timestamp comment '创建时间'
类别 | 常用类型 | 说明 |
---|---|---|
整数 | int, tinyint, bigint | 可选unsigned(无符号整数),如tinyint unsigned 范围0-255 |
浮点数 | float, double, decimal | decimal(10,2)固定精度,适合金额存储 |
字符串 | varchar(255), char(1) | varchar按需分配空间,char固定长度 |
日期 | date, datetime, timestamp | timestamp自动时区转换(1970-2038年),datetime支持更大范围 |
大文本 | text, longtext | text约64kb,longtext约4gb,适合存储json/html内容 |
二进制 | blob, longblob | 通常只存储文件路径而非实际二进制数据 |
选型建议:
优先级顺序:字段级 > 表级 > 数据库级 > 服务器级
推荐设置:
character set utf8mb4 collate utf8mb4_unicode_ci
字符集对比:
常用校对规则:
引擎 | 关键特性 | 适用场景 |
---|---|---|
innodb | 事务支持、行级锁、外键约束 | 交易系统、需要acid特性的表(默认) |
myisam | 表级锁、全文索引、高读取性能 | 数据仓库、日志表(mysql 5.7前) |
memory | 内存存储、极速访问、重启数据丢失 | 临时会话表、高速缓存 |
archive | 高压缩比(约10:1)、只支持insert/select | 历史归档数据 |
迁移引擎示例:
alter table logs engine=archive;
create table if not exists `users` ( `id` int unsigned not null auto_increment comment '用户id', `username` varchar(50) not null comment '用户名', `password` char(60) not null comment 'bcrypt加密密码', -- 固定60字符长度 `email` varchar(100) not null unique comment '邮箱', `phone` varchar(20) null comment '手机号', `birthday` date null comment '出生日期', `gender` enum('m','f','o') null comment '性别:m男,f女,o其他', `balance` decimal(10,2) unsigned default 0.00 comment '账户余额', `status` tinyint(1) unsigned default 1 comment '状态:1正常0冻结', `created_at` timestamp default current_timestamp comment '创建时间', `updated_at` timestamp default current_timestamp on update current_timestamp comment '更新时间', primary key (`id`), unique key `uniq_username` (`username`), -- 唯一约束 index `idx_email` (`email`(20)), -- 前缀索引 index `idx_phone` (`phone`), -- 普通索引 index `idx_status` (`status`) -- 低基数索引 ) engine=innodb default charset=utf8mb4 collate=utf8mb4_unicode_ci comment='平台用户信息表';
设计要点:
约束类型 | 语法示例 | 作用说明 |
---|---|---|
主键约束 | primary key (id) | 唯一标识记录,自动创建聚集索引,innodb表必须包含主键 |
唯一约束 | unique key (email) | 保证列值唯一性,允许null值 |
非空约束 | not null | 插入时必须提供值,与default配合使用 |
默认值 | default 0 | 未显式指定值时自动填充 |
自增长 | auto_increment | 整数列自动递增(通常用于主键),注意并发问题 |
外键约束 | foreign key (dept_id) references departments(id) | 确保引用完整性,innodb支持 |
检查约束 | check (age > 0) | mysql 8.0+支持的自定义验证条件 |
外键高级用法:
foreign key (user_id) references users(id) on delete cascade -- 级联删除 on update set null -- 引用更新时置空
-- 基础结构 desc users; -- 完整建表语句(含所有选项) show create table users; -- 查看表信息 show table status like 'users';
-- 添加字段 alter table users add column wechat varchar(30) null comment '微信号' after phone, add column last_login datetime null comment '最后登录时间'; -- 修改字段 alter table users modify column email varchar(150) not null comment '电子邮箱', change column phone mobile varchar(20) null comment '手机号码'; -- 删除字段 alter table users drop column obsolete_field; -- 添加索引 alter table users add index idx_wechat (wechat), add fulltext index ft_idx_username (username);
-- 安全删除(表不存在时不报错) drop table if exists temp_users; -- 清空表数据 truncate table user_logs; -- 比delete更快且重置自增值
表名:
relation1_relation2
格式(如user_roles
)字段名:
text_value
)is_
前缀(is_active
)数据类型优化:
特殊场景处理:
-- 软删除设计 add column is_deleted tinyint(1) default 0 comment '是否删除', add column deleted_at timestamp null comment '删除时间'; -- 树形结构 add column parent_id int unsigned null comment '父节点id', add column tree_path varchar(255) null comment '路径:1,5,22';
-- 联合索引(注意顺序) create index idx_name_phone on customers(last_name, first_name, phone); -- 前缀索引(长文本字段) create index idx_product_desc on products(description(20)); -- 覆盖索引优化 alter table orders add index idx_cover_user (user_id, status, create_time);
-- 创建数据库时指定 create database myapp default character set utf8mb4 collate utf8mb4_unicode_ci; -- 修改已有表字符集 alter table products convert to character set utf8mb4 collate utf8mb4_unicode_ci;
生产环境建议:
关键注意事项:
到此这篇关于mysql 数据库表创建的文章就介绍到这了,更多相关mysql数据库表创建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论