ms sql 服务器会在自动递增模式下重用已删除的主键吗?
will ms sql server reuse deleted primary keys in auto increment mode?
假设我的 table 中有 100 行,我的主键是整数,它会从 1 自动递增 1。我合并我的数据并在行 ID 达到 100 时清除 table, SQL 服务器会重用删除的主键吗?
因为主键是自增1,如果上面问题的答案是否定的,那么下一次插入会发生什么,一旦主键达到了'Int'可以容纳的最大可能数?
MSSQL 将不会重新使用已使用 DELETE
删除的主键(我假设您正在谈论 identity
增量。)如果您 TRUNCATE
table 它将重置种子并重新使用它们。
如果您超过 INT
的最大值,它确实会无法进入下一行。您可以将 INT
列转换为 BIGINT
以避免这种情况。
BIGINT
的最大值为:9,223,372,036,854,775,807
并且 INT
的上限为 2,147,483,647
但请注意.. 您也可以使用这些负值!
您可以在此处阅读有关这些上限的信息:https://docs.microsoft.com/fr-fr/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql?view=sql-server-2017
不,SQL 服务器不会重复使用 ID。如果您有 100 条 ID 从 1 到 100 的记录并将它们全部删除,则下一个插入的行将具有 ID = 101。
但是如果删除后想从1开始,可以使用这个命令:
DBCC CHECKIDENT('TableName', RESEED, 0)
它将重新植入您的身份并使其从 1 重新开始。
这取决于你的意思
I...clear the table once row id reaches 100
如果您要发出 DELETE
语句,则不会,标识列将在下一次插入时发出 101
。
如果您发出 TRUNCATE TABLE
语句,那么是的,table 将在下一次插入时重新播种到 1
(或任何您的种子值)。
假设我的 table 中有 100 行,我的主键是整数,它会从 1 自动递增 1。我合并我的数据并在行 ID 达到 100 时清除 table, SQL 服务器会重用删除的主键吗?
因为主键是自增1,如果上面问题的答案是否定的,那么下一次插入会发生什么,一旦主键达到了'Int'可以容纳的最大可能数?
MSSQL 将不会重新使用已使用 DELETE
删除的主键(我假设您正在谈论 identity
增量。)如果您 TRUNCATE
table 它将重置种子并重新使用它们。
如果您超过 INT
的最大值,它确实会无法进入下一行。您可以将 INT
列转换为 BIGINT
以避免这种情况。
BIGINT
的最大值为:9,223,372,036,854,775,807
并且 INT
的上限为 2,147,483,647
但请注意.. 您也可以使用这些负值!
您可以在此处阅读有关这些上限的信息:https://docs.microsoft.com/fr-fr/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql?view=sql-server-2017
不,SQL 服务器不会重复使用 ID。如果您有 100 条 ID 从 1 到 100 的记录并将它们全部删除,则下一个插入的行将具有 ID = 101。
但是如果删除后想从1开始,可以使用这个命令:
DBCC CHECKIDENT('TableName', RESEED, 0)
它将重新植入您的身份并使其从 1 重新开始。
这取决于你的意思
I...clear the table once row id reaches 100
如果您要发出 DELETE
语句,则不会,标识列将在下一次插入时发出 101
。
如果您发出 TRUNCATE TABLE
语句,那么是的,table 将在下一次插入时重新播种到 1
(或任何您的种子值)。