項目需求,有張表,原有三個聯合主鍵,現在需要再加一個字段進去,而恰恰這個字段可以為空的。去數據庫撈了一把,還好數據都不為空:
SQL> select count(*) from t_wlf_record t where t.acceptinvitetime is null; COUNT(*) ---------- 0
那么我們需要先把這個字段修改為非空字段:
alter table T_WLF_RECORD modify ACCEPTINVITETIME not null;
接着才能修改主鍵約束,約束無法直接修改,只能先刪后插:
alter table T_WLF_RECORD drop constraint SYS_C0018888;
alter table T_WLF_RECORD add constraint PK_T_WLF_RECORD PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID, ACCEPTINVITETIME);
最后把注釋改下:
comment on column T_WLF_RECORD.ACCEPTINVITETIME is '接受邀請時間(聯合主鍵)';
作為一個專業人員,我們應該把回滾語句也寫好:
alter table T_WLF_RECORD drop constraint PK_T_WLF_RECORD; alter table T_WLF_RECORD add constraint SYS_C0018888 PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID); alter table T_WLF_RECORD modify ACCEPTINVITETIME null; comment on column T_WLF_RECORD.ACCEPTINVITETIME is '接受邀請時間';
最后總結下:約束的作用是保證數據的唯一性和完整性,比如主鍵約束你作為主鍵的字段不能為空,唯一約束你不能插入相同數據。具體區分如下:
1、主鍵約束要求列值非空,而唯一鍵約束和唯一索引不要求列值非空,都不能有重復數據;
2、主鍵約束和唯一鍵約束會隱式創建同名的唯一索引,當主鍵約束或者唯一鍵約束失效或被刪掉時,隱式創建的唯一索引會被刪除。