提问人:Neek 提问时间:7/11/2023 更新时间:7/12/2023 访问量:42
使用什么Liquibase XML元素来重置MySQL中列的AUTO INCREMENT计数器?
What Liquibase XML element to use to reset AUTO INCREMENT counter for a column in MySQL?
问:
在MySQL中,您将使用这种SQL来重置表的AUTO INCREMENT计数器:
ALTER TABLE my_table AUTO_INCREMENT = 200;
在 Liquibase 中使用的相应 XML 元素是什么?
我正在编写一个将新数据加载到现有表中的程序,我希望自动递增主键再次开始计数。即:changeSet
1
<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>
这加载数据正常,但该列从最后一个已知的值继续其值,这是正常的,因为我没有重置表的值。id
id
AUTO_INCREMENT
我可以使用原始元素,即:sql
<sql>ALTER TABLE my_table AUTO_INCREMENT = 1</sql>
但我担心其他数据库的语法会有所不同,最好由特定的 Liquibase 命令处理。
也许我们可以在已经是自动递增的列上使用 https://docs.liquibase.com/change-types/add-auto-increment.html 来重置它?似乎有点沉重。addAutoIncrement
答:
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>
评论