【问题标题】:Adding id from same source for two tables in SQL为 SQL 中的两个表添加来自同一源的 id
【发布时间】:2023-03-04 16:56:01
【问题描述】:

我有两个表,ThreadsPosts,目前它们都有 id 作为主键的自动递增整数,所以当用户添加一个新线程时,它的 id 将为 1,那么对于新帖子 id 也将是 1。我希望该帖子的 id 为 2,新帖子/线程 3 等等。 我正在使用 Postgesql,谢谢您的建议。

【问题讨论】:

  • 不要这样做。主题和帖子是不同的实体。它们的主键不应相互混淆。

标签: sql postgresql


【解决方案1】:

如果我理解正确,您想避免在第一个新帖子中使用 id 1,对吗?最简单的方法是从表 post 中手动删除第一行,因为它是自动递增的整数,所以不会创建 1

【讨论】:

  • 并非如此。我想对线程和帖子都有一个自动递增的 id 拉动。因此,对于第一个实体(尽管是帖子或线程),id 将为 1,第二个实体为 2,依此类推。这就像有一个 id 列但有两个表。
  • 在两个表中拥有唯一 ID 听起来不正确(对于未来),但一种方法是代替自动递增,您可以检查两个表的最后一个 ID 值并添加 ID +1 到您想要的表格,或者您可以查看此链接 stackoverflow.com/questions/16961580/…
【解决方案2】:

我建议您让主键自动递增。如果您的要求是强制性的,您可以检索另一个表的最大 id,将其加 1 并将此值插入当前表的 id 列中,然后再添加任何新行。 获取最大id的代码:

select max(id) from threads

【讨论】:

  • id 已经是自动递增的,但它们对于线程和帖子是分开的。似乎您的解决方案仅适用于添加帖子,但是在添加线程时,我还必须检查帖子和线程的最大 ID,获取并增加。只是想知道是否有任何预先构建的方法可以在 sql 中执行此操作。
  • 不,在 sql 中没有任何内置方法可以这样做。您必须为线程和帖子实现相同的逻辑。我写了线程的示例,因为我假设您会使用我的示例弄清楚如何为帖子执行此操作。
猜你喜欢
  • 1970-01-01
  • 2015-12-13
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多