【问题标题】:Relying on auto increment feature of MySQL?依赖 MySQL 的自动增量功能?
【发布时间】:2012-09-10 04:06:31
【问题描述】:

我的表格中总是有一个“ID”字段,并使用这些 ID 完成我的 PHP 工作。

喜欢;

id      Username
1       User1
2       User2
3       User3

PHP 是这样工作的;

show_member_details.php?memberID=3

ID 字段始终设置为自动递增。

在大型项目/表上依赖 MySQL 的自动增量功能是否安全?就像一个表中的一百万个条目?

【问题讨论】:

  • 你为什么会觉得这不安全?
  • 我读过一篇文章,其中 MySQL 自动增量功能有时在大表上不可靠。 (就像一百万个条目)但找不到链接。
  • 不可靠是什么意思?
  • 想象一下您在 PHP 端执行此任务。一个表中有 3 个人,但是您删除了一个,所以现在总数为 2。PHP 本身会通过计算 ID 表来给一个新的注册人拥有 ID 3。但是,ID 3 属于您删除的帐户。因此,它可以将他的 cmets 保存在某个地方。新帐户将自动附加旧帐户的 cmets。基本都是这样的。自动增量功能将提供一个新的注册人 4 作为 ID,因此它不会影响其他表。但是,它会在大表上成功计数,还是在数据库恢复后?
  • auto_increment 不可靠的唯一方法是,如果您为预期用途选择了太小的整数类型。例如看看 twitter,它使用签名的 32 位 int 作为推文 ID - 他们用完了,不得不使用 bigints 重建。

标签: php mysql sql


【解决方案1】:

是的,您可以将其定义为 AUTO INCREMENT。

您需要将 ID 字段定义为 BIGINT,其范围为 0 到 18446744073709551615。

FOR 可以安全地显示在 url 中,您可以对其进行加密。

【讨论】:

  • 实际上是 -9223372036854775808 到 9223372036854775807(签名)或 0 到 18446744073709551615(未签名)。
  • 不小心使用BIGINT 是个坏主意。它会浪费存储空间和处理时间,因此除非确实需要,否则不应使用。
  • @Dagon :我认为我们不会将我们的 ID 字段存储在 (-) 符号中。例如.. -1,-2 .. 我说的对吗?
  • 我不会,但它不是一种无效的方法。 @Lusitanian,是的,但差别很小
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2015-03-08
相关资源
最近更新 更多