产品概述
应用场景
产品架构
实例类型
兼容性说明
使用规范建议
CREATE TABLE 不仅定义了数据的逻辑结构(列、索引、约束),还一定程度上影响数据在分布式集群中的存储与分布策略。表类型 | 简介 | 适用场景 |
单表 | 数据不拆分,全量存储在单个存储节点上。 | 数据量小、写入并发度不高的业务表。 |
分区表 | 数据根据分区键打散,分布在多个存储节点上,实现水平扩展。 | 数据量大、增长快、需要高并发写入(如订单、流水)的业务表。 |
同步表/广播表 | 数据全量复制到所有存储节点以实现本地 Join,并强制所有副本强同步写入的表类型(注:目前同步表必须和广播表一起使用) | 适用于数据量小(如字典/配置)、读多写少、且频繁与大表进行关联查询的场景。 |
CREATE TABLE 语句通常形式如下:CREATE TABLE <table_name> (<create_definitions>) {table_options};
<table_name> :必填。表的唯一标识符。<create_definitions> :必填。包含列定义、主键约束等。{table_options} :选填。常用项为 COMMENT='...', CHARSET=utf8mb4,以及一些可能的自定义语法。<column_name> <data_type> {column_qualification}
<column_name>:列的标识符。<data_type>:规定该列可存储的数据类别(如整数、字符、时间等)。{column_qualification}:可选的列级约束(如 NOT NULL、DEFAULT)或生成策略。CREATE TABLE `warehouse`.`inventory_items` (`sku_id` bigint NOT NULL,`item_name` varchar(150),`storage_zone` enum('Cold_Chain', 'Dry_Goods', 'Hazardous', 'General'),`entry_time` datetime,`quantity` int,`unit_cost` decimal(18,4),PRIMARY KEY (`sku_id`)) COMMENT='商品库存核心表';
bigint(8字节)而非 int,是为了应对大型仓库可能存在的百亿级商品种类。varchar(150) 是变长字符串。如果商品名只有10个字,它只会占用约10个字节的空间(加上长度前缀),不会像 char 那样强制填充空格,非常适合存储长度不一的文本。enum 可以强制数据符合预定义规范,防止出现 "ColdChain" 和 "cold_chain" 这种数据不一致的情况。int 最大支持约21亿,对于单品库存通常绰绰有余。decimal(18,4)。精度18:支持极大的总金额,标度4:保留小数点后4位(如12.5678)。NULL 值。INT, BIGINT, DECIMAL, VARCHAR),减少解析开销,提升存储效率。NOT NULL、唯一约束 UNIQUE KEY、默认值 DEFAULT 等。DEFAULT 约束。这样在插入数据时无需指定每一列的值,数据库会自动填充。CREATE TABLE `warehouse`.`inventory_items` (`sku_id` bigint NOT NULL,`item_name` varchar(150),`storage_zone` enum('Cold_Chain', 'Dry_Goods', 'Hazardous', 'General'),-- 使用 DEFAULT CURRENT_TIMESTAMP 自动填入当前时间`entry_time` datetime DEFAULT CURRENT_TIMESTAMP,`quantity` int,`unit_cost` decimal(18,4),PRIMARY KEY (`sku_id`)) COMMENT='商品库存核心表';
UNIQUE 约束。sku_id 是主键,但您可能还要求 商品名称 (item_name) 在整个仓库中也不能重复,可以这样改写:CREATE TABLE `warehouse`.`inventory_items` (`sku_id` bigint NOT NULL,-- 添加 UNIQUE 约束,如果插入相同的商品名称会报错`item_name` varchar(150) UNIQUE,`storage_zone` enum('Cold_Chain', 'Dry_Goods', 'Hazardous', 'General'),`entry_time` datetime,`quantity` int,`unit_cost` decimal(18,4),PRIMARY KEY (`sku_id`)) COMMENT='商品库存核心表';
NOT NULL 约束。quantity 也不能为 NULL(可以默认为0),可以这样改写:CREATE TABLE `warehouse`.`inventory_items` (`sku_id` bigint NOT NULL,-- 既不能重复,也不能为空`item_name` varchar(150) UNIQUE NOT NULL,`storage_zone` enum('Cold_Chain', 'Dry_Goods', 'Hazardous', 'General'),`entry_time` datetime DEFAULT CURRENT_TIMESTAMP,-- 不能为 NULL,且默认值为 0`quantity` int NOT NULL DEFAULT 0,`unit_cost` decimal(18,4),PRIMARY KEY (`sku_id`)) COMMENT='商品库存核心表';
ALTER TABLE ... PARTITION BY ... 语句将其在线转换为分区表,数据会自动重分布到集群的其他节点,无需停机迁移。文档反馈