asp.net - 数据库中的自动增量功能

标签 asp.net mysql sql-server database sql-server-2005

我使用 SQL Server,当我创建一个新表时,我将特定字段设置为自动递增 首要的关键。问题是有人告诉我让字段为主键自动递增意味着删除任何记录时(他们不关心自动递增字段编号)字段在某个时候增加 - 如果我的字段类型是例如整数 - 整数范围将被完全消耗,我会遇到麻烦。所以他们告诉我不要再使用此功能。

最好的解决方案是通过代码获取我的主键的最大值然后如果该值不存在则最大值将为 1 否则 max + 1.

关于这个问题有什么建议吗?我可以使用自动递增功能吗?

我还想知道哪些情况不适合使用自动增量......以及替代方案......

注意::这个问题是一般性的,并不特定于任何 DBMS,我想知道对于像 ORACLE、Mysql、INFORMIX 等 DBMS 也是如此

非常感谢。

最佳答案

您应该使用标识(自动递增)列。 bigint数据类型可以存储值 最多 2^63-1 (9,223,372,036,854,775,807)。我认为您的系统不会很快达到这个值,即使您正在插入和删除大量记录。

如果您正确地实现了您建议的方法,您最终会遇到很多锁定问题。否则,您将不得不处理因违反约束(或者更糟 - 非唯一值,如果没有主键约束)而引发的异常。

关于asp.net - 数据库中的自动增量功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075624/

相关文章:

c# - 为什么 Request ["url"] 默认设置?

python - 使用表类型的 pyodbc 没有结果

jquery - 如何使用 jquery 覆盖 aspx 控件应用的 css?

c# - 如何将索引号作为值输入到foreach中?

mysql - 计算位于另一个表中以逗号分隔的值的类别 id 的出现次数?

mysql - 选择按两列分组的计数

mysql - 优化 select 中的派生表

sql-server - 如何使用SSIS读取Excel电子表格中的变量值

sql - 如何查找记录的行号?

c# - 最后 Activity 日期 - 更好的实现想法