【问题标题】:Is the id irreplaceable or not?id是不可替代的吗?
【发布时间】:2016-08-23 07:46:24
【问题描述】:

当我输入这个时,我在谷歌上没有搜索任何内容。在 xampp 服务器中,如果我创建一个 ID 表(它也在 INT 中),例如,用户 A 创建了一个帐户,其 ID12强>。然后,用户 A 删除了它的帐户,所以它的 ID(12) 也被删除了。现在我的问题是,如果另一个用户创建了一个帐户,那么新 USERID 将是 12 还是会自动循环到ID 13

【问题讨论】:

  • 如果它是一个 MySQL 表并且它的 AUTO-INCREMENT 设置为 true 那么它永远不会输入相同的数字两次,无论表中当前是什么。你可以重置它,但需要在 MySQL 中对这个表运行特定的命令,
  • @Martin 的 cmets 并不完全正确。让我们重新表述一下。在任何给定时间,没有两行具有相同的编号。但是,如果你删除#12是最高ID,然后重启MySQL,#12可能会被重用。
  • @rick james,以更正常的方式,如果一个人的网站一直在运行,并且其中一个用户帐户被删除了?那么它会被替换吗?
  • #12 将在 InnoDB 中重用,而不是在 MyISAM 中。如果您需要保证数字 12 永远不会被重复使用,您需要AUTO_INCREMENT 以外的机制。如果在删除用户时,您删除了其他表中对 #12 的所有引用;重复使用 12 真的很重要吗?

标签: mysql database-design xampp auto-increment


【解决方案1】:

这取决于您的数据库结构。

通常,最好的办法是为您的ID 列使用自增主键。这样,MySQL 会自动分配下一个值。它总是递增,永远不会返回填充缺失值——因为这可能会破坏表的完整性。

假设您的用户与论坛帖子相关联,并且用户 A 删除了他们的帐户,这会从您的用户表中删除他们的条目,但不会删除论坛帖子本身1,这仍然引用用户 ID 12。如果您要强制重复使用旧值,则新用户将与之前用户的帖子相关联。

如果他们尝试将自动递增列用于其他目的(排序顺序,或作为应用程序中循环中的计数),这会导致一些人遇到困难,但这通常是对列的滥用,通常意味着他们是做错了(应该添加另一列或使用不同的计数方法)。

1 - 请注意,我实际上不会以这种方式构建我的论坛软件,但它很好地说明了这一点。

【讨论】:

  • 如果删除用户#12,最好删除其他表中引用#12的所有行。
猜你喜欢
  • 1970-01-01
  • 2011-03-17
  • 2021-09-07
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 2019-06-03
相关资源
最近更新 更多