【问题标题】:SQL Primary Key (ID) Auto start from beginningSQL 主键 (ID) 自动从头开始
【发布时间】:2020-05-11 00:06:31
【问题描述】:

我正在使用 3rd 方定价 API,数据包含价格的开始和结束日期。我已经检查了 SQL 数据库的限制如下;

BIGINT    Integer data from -2^63 through 2^63 - 1

INT       Integer data from -2^31 through 2^31 - 1

SMALLINT  Integer data from -2^15 through 2^15 - 1

TINYINT   Integer data from 0     through 255

Source

当数据到来时,我删除表中的数据并创建新数据。因为日期范围总是变化的。

所以想象一下,我达到了表中的最大身份编号值。但此时表中实际上最多有 300.000 行。我可以从 0 或 1 开始身份号码吗?还是我必须使用 mongodb?

所以,同时有 300.000 行。

最好的,

【问题讨论】:

  • 根据您的问题标题,您可以重置标识列值,但如果不从该表中删除以前的值,则不能从一开始就使用这些值,因为您说它是主键列。跨度>

标签: mysql sql sql-server mongodb auto-increment


【解决方案1】:

如果它不代表数据被唯一标识的问题:

您可以直接使用TRUNCATE,它会重置身份。但它可能需要更高的权限。

或者DELETE并用DBCC CHECKIDENT ('table', RESEED, 1)重置身份

【讨论】:

  • 但这是手动操作对吧?我们可以创建一个函数来检查身份号码并在达到最大值时重置身份吗?
  • @Shalafister's,在这种情况下,您可以创建 SQL Server 触发器或安排 SQL Server 作业来检查和重置该值。您也可以编写邮件功能来通知最大值。
  • @Shalafister's :只要您的身份计数器接近限制,您就可以使用与日常 SQL 作业相关联的存储过程
  • @SurajKumar 大多数情况下,不太建议使用 SQL 触发器
  • @m4s4mun3 这取决于所以我提供了不同的选项,除了 SQL Server 之类的触发器之外,还获得了数据库邮件系统的通知并手动完成工作或其他方式。
【解决方案2】:

假设您使用 BIGINT 标识列作为主键。最大值为 9,223,372,036,854,775,807。这意味着,如果您在可预见的将来(及以后)向表中添加 10,000 行/秒,它将带您:

9,223,372,036,854,775,807 / (10,0000 * 60 (秒) * 60 (分钟) * 24 (小时) * 365 (天))

=> 29 247 120 年,直到您达到最大值。 (而且计算甚至没有考虑闰年。)

所以,如果我是你,我不会担心 ID 用完。

【讨论】:

  • 这是一个非常有趣的事实。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
相关资源
最近更新 更多