【问题标题】:Cannot add a non-primary key identity column无法添加非主键标识列
【发布时间】: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?

标签: mysql sql liquibase


【解决方案1】:

我相信您现有的列被视为主键。为了检查它,请参阅 HeidiSQL 或类似中的索引选项卡。您可以在此处找到有关该主题的更多信息Add Auto-Increment ID to existing table?

以下变更集应该可以工作:

<changeSet id="1" author="Me">
    <dropPrimaryKey tableName="tv_campaigns"/>
    <addColumn tableName="tv_campaigns">
        <column name="ID" type="bigint(20)" autoIncrement="true">
            <constraints nullable="false" primaryKey="true" unique="true"/>
        </column>
    </addColumn>
    <addAutoIncrement tableName="tv_campaigns" columnName="ID" columnDataType="bigint(20)"/>
</changeSet>

【讨论】:

    【解决方案2】:

    这听起来像是 MySQL 施加的限制。这并不奇怪,真的。您是否能够使用 SQL 语句进行相同的更改?如果是这样,那么它应该可以通过 Liquibase 实现。但如果你不能用 SQL 做,那么你也不能用 Liquibase 做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多