
在设计 TiDB 数据库表结构时,SCHEMA 的定义直接关系到数据存储的效率、可维护性以及功能的正确性。一些关于表属性、索引和默认值的细微规则,往往是开发者容易混淆或出错的地方。下面这道题就集中了几个常见的知识点,我们来逐一分析。
题目:关于 TiDB 数据库中 SCHEMA 的设计,不正确的是?
A、PRE_SPLIT_REGIONS 是列属性,在使用时写在自增列的后面
B、非聚簇索引可以在建表之后添加或者删除
C、AUTO_RANDOM 和 AUTO_INCREMENT 不可以同时出现在同一列中
D、NOW 函数可以作为时间和日期类型的默认值
选项解析与答案
A、PRE_SPLIT_REGIONS 是列属性,在使用时写在自增列的后面
这个说法是错误的,也是本题的正确答案。PRE_SPLIT_REGIONS 并非列属性,它是一个表级选项,主要用于在创建表时预分裂 Region,以优化写入热点。它是在建表语句的末尾,以 PRE_SPLIT_REGIONS = N 的形式指定,其中 N 表示预分裂的数量。因此,它不能写在某个自增列后面作为列属性使用。
B、非聚簇索引可以在建表之后添加或者删除
这个说法是正确的。在 TiDB 中,非聚簇索引(即二级索引)支持通过 CREATE INDEX 语句在表创建后添加,也可以通过 DROP INDEX 语句进行删除,提供了很大的灵活性。
C、AUTO_RANDOM 和 AUTO_INCREMENT 不可以同时出现在同一列中
这个说法是正确的。AUTO_RANDOM 是 TiDB 用于解决 AUTO_INCREMENT 在分布式环境下可能产生的写入热点问题而引入的扩展属性。两者都用于自动生成唯一值,但机制和目的不同。同一列只能选择其中一种自动赋值机制,不能同时指定。
D、NOW 函数可以作为时间和日期类型的默认值
这个说法是正确的。在 TiDB 中,可以为 TIMESTAMP 或 DATETIME 类型的列指定 DEFAULT CURRENT_TIMESTAMP(或同义的 NOW())作为默认值,这样在插入数据时若未显式指定该列的值,数据库会自动填入当前时间。
总结
通过以上分析,我们可以清晰地看到,不正确的设计是选项 A。PRE_SPLIT_REGIONS 是一个重要的表级性能优化选项,但必须正确理解其用法层级。
掌握这些 SCHEMA 设计中的细节,能帮助我们在使用 TiDB 时避开陷阱,设计出更高效、更稳健的数据表。如果你想深入探讨更多 数据库 设计模式或分布式系统实践,欢迎来 云栈社区 与更多开发者交流学习。
|