NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
``` contract_id varchar(50) NOT NULL COMMENT '合同ID(业务主键)', UNIQUE KEY `uk_contract_id` (`contract_id`), ``` 声明一个最长 50 字符的字符串列 `contract_id`,强制非空,并将其业务含义标注为“合同ID(业务主键)”。 | 子句/属性 | 含义与注意事项 | |-----------|----------------| | `contract_id` | 列名,建议与业务术语保持一致,方便 ORM 映射。 | | `varchar(50)` | 可变长字符串,上限 50 字符;MySQL 层按实际长度 + 1 字节存储(≤255 时)。若存 UTF8MB4,最多耗 200 字节。 | | `NOT NULL` | 禁止插入 NULL,保证业务主键一定有值;省去 IS NULL 判断,使索引更高效。 | | `COMMENT '合同ID(业务主键)'` | 元数据注释,写入表定义;`SHOW FULL COLUMNS` 或 `information_schema` 可查,方便 DBA/开发快速理解用途。 | | 业务主键 vs 代理主键 | 本列承担“业务上唯一”职责,可与数据库自增 ID 并存;需额外加 `UNIQUE KEY(contract_id)` 或干脆 `PRIMARY KEY(contract_id)` 来保证唯一。 | | 性能提示 | varchar 做主键时,InnoDB 聚簇索引叶子节点存整条记录,字符串越长二级索引越胖;若合同号规则固定且较短,可用 `char` 或转 `bigint` 枚举值。 | >[info]UNIQUE KEY `uk_contract_id` (`contract_id`), 一句话总结 给列 `contract_id` 加上唯一索引 `uk_contract_id`,保证全表该列值不重复,可快速等值查询且允许 NULL(若列定义允许)。 详细解释 | 维度 | 说明 | |---|---| | 关键字 | `UNIQUE KEY` 等价于 `UNIQUE INDEX`,在 MySQL 里既是约束也是 B+Tree 索引。 | | 名称 | `uk_contract_id` 为用户自定义索引名,后续 `SHOW INDEX`、Hint、`ALTER TABLE DROP INDEX` 都用它引用。 | | 作用 | 1. 唯一性:插入/更新重复值时报 1062 Duplicate entry。<br>2. 加速查询:等值 (`=`) 或范围 (`<, >, BETWEEN`) 搜索可快速定位。<br>3. 可为 NULL:与 PRIMARY KEY 不同,允许多行 NULL(视为互不相同)。 | | 与主键区别 | 一张表只能有一个主键,但可有多个 UNIQUE KEY;主键默认聚簇,UNIQUE 为二级索引,叶子存主键值。 | | 复合唯一 | 可写 `UNIQUE KEY uk_multi (col1, col2)`,组合整体唯一,单列可重复。 | | 性能注意 | 字符串越长,索引节点扇出减少,IO 增多;若合同号已定长且较短,可省空间;写入时需维护索引,高并发批量插入建议先删后加。 |