首页 > 解决方案 > 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 填充的标识列,而是以(对我而言)异常方式插入。为什么会这样?

在此处输入图像描述

标签: db2

解决方案


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

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


推荐阅读