2016-05-30 166 views
1

我们有一个这样的表来维护每个'文章'的'注释'。我们有数百万篇文章,每篇文章可能有多个评论。MySQL - 生成自动增量的唯一标识

我们要求'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,但缺点是它需要额外的查询才能通过调用mysql_insert_id()来获得'id'。如果可以在文章范围内自动增加'id',这将很容易。

上一个更好的办法任何建议,使

  1. 我们可以生成较小的“身份证”,这是一个独特的文章,但在所有的文章不一定是唯一的。
  2. 没有额外的查询来获取生成的“ID”

感谢

+0

您可以实现每篇文章的顺序来完成您所需要的内容。 – wchiquito

回答

0

这种方法的作品,但它是在这个意义上矫枉过正,我们需要 使用BIGINT的“身份证”,即使我们不预计每篇文章 的评论将超过几千。

我不认为这是必要的。想象一下,你想在你的应用程序的某些部分输出最近的评论:

  • 与当前的设计,你显示的信息,并有像url/viewComment/commentId={commentId}链接。
  • 如果评论是识别与articleIdcommentInternalId,如(1型)的所有URL将需要两个IDS

一种方法来生成id是:

(COUNT(1) FROM `comments` WHERE article = {article}) + 1 

,但它显然更复杂而且使用自动增量的代价很高。