【发布时间】:2013-04-22 11:35:43
【问题描述】:
每次我重新启动我的 DB2 服务时,自动增量字段总是自行更改, 例如:在我重新启动之前,自动增量值是13,并且它增加了1,并且在我重新启动后它总是变成31并且它总是增加20 知道是什么原因造成的吗?
每次我重新启动我的 Db2 服务时,我都必须执行这个命令
ALTER TABLE <table> ALTER COLUMN <column> RESTART WITH 1
【问题讨论】:
每次我重新启动我的 DB2 服务时,自动增量字段总是自行更改, 例如:在我重新启动之前,自动增量值是13,并且它增加了1,并且在我重新启动后它总是变成31并且它总是增加20 知道是什么原因造成的吗?
每次我重新启动我的 Db2 服务时,我都必须执行这个命令
ALTER TABLE <table> ALTER COLUMN <column> RESTART WITH 1
【问题讨论】:
DB2 具有生成值的缓存,以减少生成值的开销(减少 IO)。此缓存在内存中,并根据请求分配值。
在创建/更改表时查看缓存选项。默认缓存值为 20。
了解序列在 DB2 中的工作方式很重要。序列与生成的值/标识列共享许多概念。
【讨论】:
来自W3schools:
“自动增量允许在向表中插入新记录时生成唯一编号。”
这是您唯一可以期待的:唯一(=非冲突)数字。这些是如何生成的则留给 DBMS。你不能期望一个没有任何间隔的数列。
例如,出于性能原因,DBMS 可能会选择“预分配”十个数字(23..32、33..42、...)的块,因此自动递增字段只能递增每(最多)十个记录。如果您有一个INSERT 语句,它只将 5 条记录插入到新创建的表中,它可以“获取 10 个数字的块”(0..9),使用它的前五个值(0..4)并剩下的不用。通过获取这一个数字块,计数器从 0 增加到 10。因此,下一个获取块的 INSERT 语句将获取范围从 10 到 19 的数字。
【讨论】: