Oracle修改主鍵約束


  項目需求,有張表,原有三個聯合主鍵,現在需要再加一個字段進去,而恰恰這個字段可以為空的。去數據庫撈了一把,還好數據都不為空:

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、主鍵約束和唯一鍵約束會隱式創建同名的唯一索引,當主鍵約束或者唯一鍵約束失效或被刪掉時,隱式創建的唯一索引會被刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM