如果ID是IDENTITY COLUMN,如何删除或更改ID?

时间:2016-07-12 21:30:42

标签: java sql derby

我对数据库有一定的问题。 我有一个Derby DB,COUPON_ID列由标识符确定,并且增加1。

表示例:

CREATE TABLE Coupon
(
    COUPON_ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
    TITLE VARCHAR(30),
    START_DATE DATE,
    END_DATE DATE,
    AMOUNT INTEGER,
    TYPE VARCHAR(20),
    MESSAGE VARCHAR(300),
    PRICE DOUBLE,
    IMAGE VARCHAR(500),
    CONSTRAINT PRIME_COUPON_ID PRIMARY KEY(COUPON_ID)
);

我们说,我输入了新数据或删除了......,一切正常。这是删除时的问题。 当我想要删除一些数据时,这是一个问题。 如果我有一定数量的线,将允许1000,我打算删除。一切都正常被删除,一切正常继续工作。但是这里有一个问题,那么我应该用这些空行做什么呢? 如果我想在其中插入一些数据,Derby会拒绝,因为COUPON_ID列的ID是已识别的列,并且它会自动增加。

我希望那些空行间隔不会收集。  有这个问题的决定吗?

1 个答案:

答案 0 :(得分:2)

  

但是这里有一个问题,那么我应该用这些空行做什么呢?如果我想在其中插入一些数据,Derby会拒绝,因为COUPON_ID列的ID是已识别的列,并且它会自动增加。

我倾向于认为您无法重复使用ID的原因并不是您的ID列是标识列,而是标记为GENERATED ALWAYS。在任何情况下,从DB中删除行都不会产生“空行”。之后有未使用的ID值,但这些值实际上不占用空间。

您应该忽略不再使用的ID。自动生成ID的目的是 以唯一标识行。因此,只有价值观才有助于实现这一目标。 ID值没有特别重要的意义,当然你不应该关心它们之间的差距。

  

我希望那些空行间隔不收集。有这个问题的决定吗?

如果您愿意更改列定义,那么您可能会给自己重新使用ID的能力,但您不应该这样做。这些差距不是一个需要关注的问题,除非你执行了很多删除,而你的ID值已经用完了。