如何更换所有外键?

时间:2016-11-09 23:04:03

标签: sql database foreign-keys h2

现在我有以下表结构:

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 个答案:

答案 0 :(得分:1)

  1. 首先删除引用foreign key的{​​{1}} 到USER_DATA(PERSON_DATA_ID)
  2. PERSON_DATA(ID)USER上添加新列。
  3. 将列PERSON_DATA_ID复制到PERSON_DATA_IDUSER
  4. 删除INSERT 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列。
  5. USER_DATA(PERSON_DATA_ID)foreign key
  6. 之间设置新的USER关系