gpt4 book ai didi

MySQL - 生成唯一的ID,如自动递增

转载 作者:行者123 更新时间:2023-11-30 22:18:14 25 4
gpt4 key购买 nike

我们有一个这样的表来维护每个“文章”的“评论”。我们有数百万篇文章,每篇文章可能有多个评论。

我们要求每个“文章”的“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;

这种方法可行,但从某种意义上说,即使我们不希望每篇文章的评论超过几千条,我们也需要对“id”使用 bigint,这是一种矫枉过正的做法。我们可以手动维护 id,但缺点是它需要额外的查询才能获得“id”,我们只需调用 mysql_insert_id() 即可获得。如果可以在文章范围内自动增加“id”,这会很容易。

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

  1. 我们可以生成一个较小的“id”,它对于一篇文章是唯一的,但不一定在所有文章中都是唯一的。
  2. 无需额外查询即可生成“id”

谢谢

最佳答案

This approach works but it's an overkill in the sense that we need to use bigint for 'id' even though we don't expect comments per article to be more than a few thousands.

我不认为这是必要的。假设您想在应用程序的某个部分输出最近的评论:

  • 在当前设计中,您可以显示信息并具有类似 url/viewComment/commentId={commentId} 的链接。
  • 如果评论可通过 articleIdcommentInternalId 识别,则所有网址都需要这两个 ID

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

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

但它显然比使用自动增量更复杂和昂贵。

关于MySQL - 生成唯一的ID,如自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37517869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com