【发布时间】:2016-09-27 19:45:40
【问题描述】:
我们有一个这样的表来维护每个“文章”的“cmets”。我们有数百万篇文章,每篇文章可能有多个 cmet。
我们要求“id”对于每篇“文章”都是唯一的,但不一定在所有文章中都是唯一的。
在当前的方法中,我们先插入然后使用 mysql_insert_id() 来获取“id”,因此不需要额外的查询来获取生成的“id”。
CREATE TABLE `comments` (
id bigint unsigned NOT NULL AUTO_INCREMENT,
article int unsigned int default 0,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这种方法有效,但从某种意义上说,我们需要使用 bigint 作为“id”,尽管我们不希望每篇文章的 cmets 超过几千个,但这种方法有点过头了。我们可以手动维护 id,但缺点是它需要额外的查询来获取“id”,我们只需调用 mysql_insert_id()。如果可以在文章范围内自动增加“id”,这将很容易。
任何关于更好方法的建议,以便
- 我们可以生成一个较小的“id”,它对于一篇文章是唯一的,但不一定在所有文章中都是唯一的。
- 无需额外查询即可生成“id”
谢谢
【问题讨论】:
-
你可以为每篇文章实现一个序列来完成你所需要的。
标签: mysql sql auto-increment