使用什么Liquibase XML元素来重置MySQL中列的AUTO INCREMENT计数器?

What Liquibase XML element to use to reset AUTO INCREMENT counter for a column in MySQL?

提问人:Neek 提问时间:7/11/2023 更新时间:7/12/2023 访问量:42

问:

在MySQL中,您将使用这种SQL来重置表的AUTO INCREMENT计数器:

ALTER TABLE my_table AUTO_INCREMENT = 200;

在 Liquibase 中使用的相应 XML 元素是什么?

我正在编写一个将新数据加载到现有表中的程序,我希望自动递增主键再次开始计数。即:changeSet1

<changeSet id="reload-data" author="neek">
    <delete tableName="my_table"></delete>
    <!-- want to reset the auto_increment counter here -->
    <loadData tableName="my_table"
        file="data/fresh_data.csv" separator=","/>
    <rollback></rollback>
</changeSet>

这加载数据正常,但该列从最后一个已知的值继续其值,这是正常的,因为我没有重置表的值。ididAUTO_INCREMENT

我可以使用原始元素,即:sql

<sql>ALTER TABLE my_table AUTO_INCREMENT = 1</sql>

但我担心其他数据库的语法会有所不同,最好由特定的 Liquibase 命令处理。

也许我们可以在已经自动递增的列上使用 https://docs.liquibase.com/change-types/add-auto-increment.html 来重置它?似乎有点沉重。addAutoIncrement

Liquibase 自动增量

评论


答:

1赞 htshame 7/11/2023 #1

重置 autoIncrement 没有 Liquibase 更改。

正如你提到的,你总是可以使用变化。<sql>

如果您必须使用 Liquibase 更改(假设您没有任何与该列相关的外键,因为您要重置 autoIncrement),作为不太好的解决方法,您可以尝试删除 autoIncremented 列,然后重新创建它。

<!-- drop primary key -->
<changeSet id="foo1" author="bar">
    <dropColumn tableName="table_name" columnName="auto_incremented_column"/>
</changeSet>

<!-- recreate autoIncremented column -->
<changeSet id="foo2" author="bar">
    <addColumn tableName="table_name">
        <column name="auto_incremented_column" autoIncrement="true" type="bigserial">
            <constraints primaryKey="true"/>
        </column>
    </addColumn>
</changeSet>