2016-11-09 53 views
1

現在我有如下表結構:如何替換所有外鍵?

USER 
    ID BIGINT NOT NULL 
    USER_DATA_ID BIGINT NOT NULL REFERENCES USER_DATA(ID) 

USER_DATA 
    ID BIGINT NOT NULL 
    PERSON_DATA_ID BIGINT NOT NULL REFERENCES PERSON_DATA(ID) 

PERSON_DATA 
    ID BIGINT NOT NULL 

所以你可以看到所有的人數據ID在USER_DATA表。我現在必須做出巨大的改變。現在應該在USER表內引用人員數據ID,而不會丟失數據。所以新的模式必須是:

USER 
    ID BIGINT NOT NULL 
    USER_DATA_ID BIGINT NOT NULL REFERENCES USER_DATA(ID) 
    PERSON_DATA_ID BIGINT NOT NULL REFERENCES PERSON_DATA(ID) 

我可以用簡單的SQL語句來做到嗎?我正在使用H2數據庫。

回答

1
  1. 首先刪除引用USER_DATA(PERSON_DATA_ID)PERSON_DATA(ID)foreign key
  2. USERPERSON_DATA_ID上添加新列。
  3. 複製列PERSON_DATA_IDUSERINSERT INTO USER(PERSON_DATA_ID) SELECT ud.PERSON_DATA_ID FROM USER_DATA AS ud INNER JOIN USER AS u ON ud.ID = u.USER_DATA_ID
  4. 刪除USER_DATA(PERSON_DATA_ID)列。
  5. 設置USERPERSON_DATA
之間的新關係 foreign key