MySQL - 生成像自动增量这样的唯一ID

时间:2016-05-30 04:58:55

标签: mysql sql auto-increment

我们有一张这样的表来维护'评论'对于每篇文章'。我们有数百万篇文章,每篇文章都有多条评论。

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

关于更好的方法的任何建议,以便

  1. 我们可以生成更小的ID。这对于文章来说是独一无二的,但在所有文章中并不一定是唯一的。
  2. 无法生成额外查询' id'
  3. 由于

1 个答案:

答案 0 :(得分:0)

  

这种方法有效,但在我们需要的意义上来说这是一种过度杀伤力   使用bigint作为'id',即使我们不期望每篇文章的评论   超过几千。

我不认为这是必要的。想象一下,您想要在应用程序的某个部分输出最近的注释:

  • 使用当前设计,您可以显示信息并拥有url/viewComment/commentId={commentId}之类的链接。
  • 如果评论可以通过articleIdcommentInternalId识别,则所有网址都需要ids

生成id的一种方法是(基于1):

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

但使用自动增量显然更复杂,更昂贵。

相关问题