Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server自动增量,包括中间值_Sql_Sql Server_Primary Key_Auto Increment - Fatal编程技术网

SQL Server自动增量,包括中间值

SQL Server自动增量,包括中间值,sql,sql-server,primary-key,auto-increment,Sql,Sql Server,Primary Key,Auto Increment,我需要一个PK的自动增量,这样如果表的主键是1,2,3,4,5,6,那么下一个键应该是7,然后是8,依此类推,但是如果它们是1,2,3,6,那么下一个键应该是4,然后是5,然后是7,依此类推 如果没有办法像这样设置自动递增,那么在键为1,2,3,6的情况下,是否至少有办法使用SQL查询生成数字4 我之所以需要这样做,是因为大量数据会以分钟为单位存储到我的数据库中,它也会不断从中间删除。因此ID将很快达到100万。。。中间会有很多数字遗漏,我真的很想避免 正如所有评论员所说,你不必担心这一点。 一

我需要一个PK的自动增量,这样如果表的主键是
1,2,3,4,5,6
,那么下一个键应该是7,然后是8,依此类推,但是如果它们是
1,2,3,6
,那么下一个键应该是4,然后是5,然后是7,依此类推

如果没有办法像这样设置自动递增,那么在键为1,2,3,6的情况下,是否至少有办法使用SQL查询生成数字4


我之所以需要这样做,是因为大量数据会以分钟为单位存储到我的数据库中,它也会不断从中间删除。因此ID将很快达到100万。。。中间会有很多数字遗漏,我真的很想避免

正如所有评论员所说,你不必担心这一点。 一个好的SQL数据库系统可以处理这个问题

但是,, 如果您真的想这样做,请使用以下链接:


并将其信息与插入触发器相结合

正如所有评论员所说,您不必担心这一点。 一个好的SQL数据库系统可以处理这个问题

但是,, 如果您真的想这样做,请使用以下链接:

并将它的信息与插入触发器相结合

否-自动增量旨在保持ID的唯一性,但存在不连续的风险

<>我甚至会避免使用触发器或一些东西来“打包”丢失的数字——你冒着两个进程试图插入相同数量的问题的风险,通过插入你的(大概)聚集索引中间的性能问题等等。 如果您担心没有足够的值,请使用
bigint
——它可以存储9万亿万亿个值——比您每天删除数百万条记录所能消耗的还要多。

否-AutoIncrement是专门为保持ID的唯一性而设计的,但存在不连续的风险

<>我甚至会避免使用触发器或一些东西来“打包”丢失的数字——你冒着两个进程试图插入相同数量的问题的风险,通过插入你的(大概)聚集索引中间的性能问题等等。
如果您担心值耗尽,请使用
bigint
——它可以存储9万亿个值——比您每天删除数百万条记录所能消耗的还要多。

数据库是为大量数据而构建的。我不担心这个。如果字段是主键,那么如果缺少数字又有什么关系呢?除了唯一地标识行之外,您没有将字段用于任何重要的内容,对吗?达到100万没有错。有什么问题吗?INT最多可保存20亿个值。如果这还不够,你可以从-20亿开始,持有40亿的价值。如果这还不够,可以使用BIGINT。即使每秒生成数千行,BIGINT可以保持的正值数量也将比您的生命周期长得多。使用
INT
,从1开始,您可以获得超过20亿行。通过
BIGINT
,你可以得到922万亿(922万亿,15个零-922万亿)。如果每秒插入一行,则需要66.5年才能用完
INT
值。。。使用
BIGINT
,如果你每秒插入1000行,你需要一个令人难以置信的2.92亿年才能达到922万亿的极限。。。。对你来说足够好吗?不要再担心“回收”ID了——一开始这是个非常糟糕的主意……数据库是为大量数据而建立的。我不担心这个。如果字段是主键,那么如果缺少数字又有什么关系呢?除了唯一地标识行之外,您没有将字段用于任何重要的内容,对吗?达到100万没有错。有什么问题吗?INT最多可保存20亿个值。如果这还不够,你可以从-20亿开始,持有40亿的价值。如果这还不够,可以使用BIGINT。即使每秒生成数千行,BIGINT可以保持的正值数量也将比您的生命周期长得多。使用
INT
,从1开始,您可以获得超过20亿行。通过
BIGINT
,你可以得到922万亿(922万亿,15个零-922万亿)。如果每秒插入一行,则需要66.5年才能用完
INT
值。。。使用
BIGINT
,如果你每秒插入1000行,你需要一个令人难以置信的2.92亿年才能达到922万亿的极限。。。。对你来说足够好吗?别再担心“回收”身份证了——一开始这是个非常糟糕的主意……这不是关于价值的耗尽。如果ID是1200000而不是70,我的ID是否会占用更多数据?@Nevillenzerane否-an
int
将使用4个字节(a
bigint
8个字节)不管值是多少。@DStanley如果正在使用SQL Server行压缩,则不为真,但无论如何,这不是尝试OPs要求的好理由。这与值耗尽无关。My if ID是1200000而不是70,if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if if I。