【发布时间】:2016-05-28 08:25:27
【问题描述】:
所以我在 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”作为主键,这也会引发关于未正确定义外键关系的错误(因为原始主键还引用了另一个表的键)。
有没有办法把它做得很好或做得很好?
【问题讨论】:
-
为什么不先从campaign_id中删除FK约束,然后从tv_campaigns中删除主键,然后将主键设置为id列,然后将外键设置为campaign_id?