所以我在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"
。尝试添加&#39; id&#39;删除旧的主键(campaign_id)作为主键,并且抛出关于未正确定义的外键关系的错误(因为原始主键也引用了另一个表的键)。
有没有办法做得好或做到这一点?
答案 0 :(得分:0)
这听起来像是MySQL强加的限制。真的,这并不奇怪。您是否能够使用SQL语句进行相同的更改?如果是这样,那么应该可以通过Liquibase实现。但是如果你不能用SQL做,那么你也不能用Liquibase来做。
答案 1 :(得分:0)
我认为您现有的列被视为主键。为了检查它,请参阅HeidiSQL或类似文件中的“索引”选项卡。您可以在Add Auto-Increment ID to existing table?
中找到有关此主题的更多信息以下变更集应该起作用:
tabBox