Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法添加非主键标识列_Mysql_Sql_Liquibase - Fatal编程技术网

Mysql 无法添加非主键标识列

Mysql 无法添加非主键标识列,mysql,sql,liquibase,Mysql,Sql,Liquibase,因此,我在liquibase中创建了一个名为tv\u actions的表,如下所示 <changeSet id=" add tv campaigns table" author="abc"> <createTable tableName="tv_campaigns"> <column name="campaign_id" type="int" autoIncrement="false">

因此,我在liquibase中创建了一个名为
tv\u actions
的表,如下所示

<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>

运行此变更集时,我遇到以下错误:
“无法添加非主键标识列”
。尝试通过删除较旧的主键(campaign_id)将“id”添加为主键,这也会引发关于未正确定义外键关系的错误(因为原始主键也引用另一个表的键)


有没有一种方法可以很好地做到这一点呢?

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

我相信你现有的列被认为是主键。要检查它,请参阅HeidiSQL或类似文件中的indexes选项卡。你可以在这里找到更多关于这个主题的信息

以下变更集应起作用:

<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>

为什么不先从活动id中删除FK约束,然后从电视活动中删除主键,然后将主键设置为id列,然后将外键设置为活动id?