首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 欄位 NULL/NOT NULL 約束互轉語法:ALTER COLUMN SET/DROP NOT NULL

     編輯:DB2 教學

DB2 欄位 NULL/NOT NULL 約束互轉語法:ALTER COLUMN SET/DROP NOT NULL

DB2 修改欄位空值約束使用標準 ALTER TABLE ... ALTER COLUMN 語法,支援雙向切換。本文提供最簡語法與注意事項。

NULL → NOT NULL (加入非空約束)

ALTER TABLE Tab1
  ALTER COLUMN Col1 SET NOT NULL;

NOT NULL → NULL (移除非空約束)

ALTER TABLE Tab1
  ALTER COLUMN Col1 DROP NOT NULL;

執行前提檢查

操作前提條件失敗後果
SET NOT NULL表中現有資料 **無 NULL 值**SQL0407N: Assignment to NOT NULL column fails
DROP NOT NULL無特殊前提幾乎不會失敗

實戰流程:安全加入 NOT NULL

  1. 檢查現有 NULL:
    SELECT COUNT(*) FROM Tab1 WHERE Col1 IS NULL;
  2. 處理 NULL 值 (二選一):
    • 更新預設值:UPDATE Tab1 SET Col1 = 'default' WHERE Col1 IS NULL;
    • 刪除 NULL 行:DELETE FROM Tab1 WHERE Col1 IS NULL;
  3. 執行 ALTER:
    ALTER TABLE Tab1 ALTER COLUMN Col1 SET NOT NULL;
  4. 驗證**:
    DESCRIBE TABLE Tab1
    -- 或
    SELECT COLNAME, NULLS FROM SYSCAT.COLUMNS WHERE TABNAME='TAB1';

相關知識點

  • DB2 不支援 ALTER COLUMN ... SET DEFAULT 同時加 NOT NULL,需分兩步
  • 大表加 NOT NULL 會掃描全表驗證,建議維護窗口執行
  • DROP NOT NULL 為中繼資料操作,近乎瞬間完成
  • 若欄位有 DEFAULT 約束,SET NOT NULL 後新行插入會自動填入預設值

對比:Oracle 語法差異

-- Oracle
ALTER TABLE Tab1 MODIFY Col1 NOT NULL;
ALTER TABLE Tab1 MODIFY Col1 NULL;

-- DB2
ALTER TABLE Tab1 ALTER COLUMN Col1 SET NOT NULL;
ALTER TABLE Tab1 ALTER COLUMN Col1 DROP NOT NULL;

掌握雙向語法與前提檢查,即可安全執行欄位空值約束變更。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved