Db2中Identity列的奇怪行为?

时间:2018-08-20 07:42:21

标签: db2

我已经使用标识列在Db2中创建了一个虚拟表。 DDL在以下共享:

CREATE TABLE new_employees (
sl_no int, 
ident smallint generated always as identity
    (start with 1,
    increment by 1,
    minvalue 1)
);

但是,当我插入数据时,不是以(对我而言)异常的方式插入标识列,而不是将1递增1。为什么会发生?

enter image description here

1 个答案:

答案 0 :(得分:4)

原因是缓存序列/同一性值。我假设您已执行以下操作:  -您的数据库尚未激活  -您已连接Db2并已断开连接进行测试

Db2每次首次使用时,都会为每个序列/标识填充值的高速缓存。从那里开始消耗值。每当Db2数据库关闭(最后一个连接终止或数据库被停用)时,缓存中的其余数字都会丢失。 默认缓存大小为20,请参见CREATE TABLE或CREATE SEQUENCE。没有NO CACHE选项。