2016-02-16 46 views
0

因此,我在liquibase中創建了一個名爲tv_campaigns的表,如下所示。無法添加非主鍵標識列

<changeSet id=" add tv campaigns table" author="abc"> 
     <createTable tableName="tv_campaigns"> 
      <column name="campaign_id" type="int" autoIncrement="false"> 
       <constraints primaryKey="true" 
          foreignKeyName="fk_linear_tv_campaign_id" 
          references="campaigns(id)" 
          nullable="false"/> 
      </column> 
     </createTable> 
    </changeSet> 

這裏的主鍵和外鍵是相同的(campaign_id),表中只有一列。 後來我意識到,我在此表中需要一個自動增量列,並着手添加此變更:

<changeSet id="add auto increment column" author="abc"> 
     <addColumn tableName="tv_campaigns"> 
      <column name="id" type="int" autoIncrement="true"> 
       <constraints unique="true" 
          nullable="false"/> 
      </column> 
     </addColumn> 
    </changeSet> 

在運行這個變更我得到以下錯誤:"Cannot add a non-primary key identity column"。嘗試通過刪除舊的主鍵(campaign_id)來添加'id'作爲主鍵,並且這也引發了關於未正確定義的外鍵關係的錯誤(因爲原始主鍵也引用了另一個表的鍵)。

有沒有辦法很好地做到這一點或做到這一點?

+0

爲什麼不先從campaign_id中刪除FK約束,然後從tv_campaigns中刪除主鍵,然後將主鍵設置爲id列,並在外鍵之後使用campaign_id? – dbf

回答

0

這聽起來像是MySQL強加的限制。這真的不奇怪。你是否可以使用SQL語句進行相同的更改?如果是這樣,那麼應該可能通過Liquibase。但是,如果你不能用SQL來完成,那麼你也不能用Liquibase來完成。