到达自动生成(IDENTITY)字段的值池的末尾

时间:2011-06-13 18:05:13

标签: database auto-increment

INT字段的大多数数据库支持autogenerate,主要用作该表的键。它有时简称为id

程序之前多长时间让c#int和数据库INT值不再相互支持,或者INT值用完之前多长时间,或者这个自动生成的大小数据库的id字段,比方说sqlite?

当您尝试插入新记录,并且数据库自动生成的行ID已用完时,会发生什么;不再插入?

感谢

[编辑]

您偶尔会查看表格的ID值吗?

大多数人不知道如果由于某种原因你的应用程序有很多插入和删除,那么每次插入时都会生成一个新的ID值。似乎数据库不会重复使用已删除的ID,因此在这种情况下,如果应用程序执行了很多插入和删除操作,那么只有1000个记录的数据库就可以使用该值!

我问这个问题的原因是,通常在您经常使用ID值的应用中,跟踪记录;我总是这样做。

不要说我做了这样的事情

int record_id= reader("id").value;

什么时候会出现溢出错误? 数据库INT与所有编程环境中的int相同吗?

2 个答案:

答案 0 :(得分:4)

我不知道sqlite,但对于SQL Server,最大值如下所示:

max int (32 bit) = 2,147,483,647
max bigint (64 bit) = 9,223,372,036,854,775,807

如果在某个时刻您已用完了值范围,则尝试插入新记录将失败。它会说以下内容:

  

将IDENTITY转换为数据类型int的算术溢出错误。发生算术溢出。

同样,不知道sqlite,但在SQL Server中,失败的事务也会消耗池中的值。如果尝试插入并回滚包含事务,则生成的IDENTITY值将不会返回到池中。如果您的交易经常失败,那么这也会浪费一定数量(尽管很小)的价值。

sqlite很可能以类似的方式工作。

答案 1 :(得分:2)

SQLite中INT的最大大小为8字节,这是一个非常非常大的数字。我发现很难想象一个使用SQLite的应用程序,你实际上可以“用完”INT。您必须运行一些非常大的数据仓库系统才能实现此目的,而您不会使用SQLite。所以不要担心!