2011-12-05 52 views
1

我想將NOT NULL列添加到名爲server的表中。問題是,該表已經包含記錄。當我調用ALTER TABLE server ADD COLUMN full_discovery_duration BIGINT NOT NULL H2抱怨full_discovery_duration可能不爲空。我可以通過指定DEFAULT 0解決該問題,但我不希望爲將來的插入設置默認值。我應該做些什麼?H2:向包含記錄的表添加NOT NULL列

我應該添加一個默認的列,然後從後續語句中的列定義中刪除DEFAULT 0?有沒有更好的辦法?

回答

2

您可以先添加具有默認值的列,然後將默認值設置爲null。據我所知,擺脫默認定義是不可能的。

另一種方法是首先允許null,然後設置值,然後不允許空值。

drop table server; 
create table server(id int); 
insert into server values(1); 
alter table server 
    add column 
    full_discovery_duration bigint; 
update server set full_discovery_duration = 0; 
alter table server 
    alter column 
    full_discovery_duration set not null; 
+1

我擺脫了默認的定義,通過執行以下幾行:'ALTER TABLE server ADD ADD COLUMN cached_discovery_duration BIGINT NOT NULL DEFAULT 0; ALTER TABLE服務器ALTER COLUMN cached_discovery_duration BIGINT不爲NULL;'第一行添加值爲'0'的列。第二行刪除默認值。 – Gili

0

將列添加到現有表時,它應該是可以爲空的列或必須指定默認值。你是什​​麼意思刪除默認?你怎麼能從非空列中刪除值?

+0

我的意思是,我應該從後續語句中的列定義中刪除'DEFAULT 0'嗎?到那時,所有的行都保證已經有一個非空值的列。 – Gili

+0

你可以使用'alter table ... default null'。它不會刪除默認定義,但效果是相同的(至少據我所知)。 –

相關問題