2016-07-12 72 views
1

我對數據庫有一定的問題。 我有一個德比DB時,COUPON_ID列由標識符決定的,它由1如果ID是IDENTITY COLUMN,如何刪除或更改ID?

表例如增加:

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作爲標識的列,並且它會自動增加。

而且我希望線條的空白區間沒有收集。 有這個問題的決定嗎?

回答

2

但是這裏有一個問題,那麼我應該如何處理這些空行?如果我想向其中插入一些數據,Derby會拒絕,因爲COUPON_ID列的ID作爲標識的列,並且它會自動增加。

我傾向於認爲不能重複使用ID的原因並不是說您的ID列是標識列,而是標記爲GENERATED ALWAYS。無論如何,刪除數據庫中的行都不會產生「空行」。之後有一些未使用的ID值,但這些值實際上不佔用空間。

您應該忽略不再使用的ID。自動生成的ID的目的是只有來唯一標識行。因此,只有價值觀才能達到這個目的。沒有特別的意義應歸因於ID值,當然你不應該關心它們之間的差距。

而且我希望線條的空白區間沒有收集。有這個問題的決定嗎?

如果你願意改變列定義,那麼你可能會給自己重新使用ID的能力,但你不應該這樣做。除非您正在執行如此多的刪除操作,否則缺口不會被關注。