gpt4 book ai didi

mysql - 通过 Liquibase 重命名主键列,自动增量被删除(MySQL)

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:43 26 4
gpt4 key购买 nike

给定以下更改日志,在 MySQL 数据库上执行后,表“table_person”的主键列将不会有自动增量。

因此,对该表的插入将失败,并显示类似于以下的消息:“SQL 错误 (1062):键‘PRIMARY’的重复条目‘0’”

<?xml version="1.0" encoding="UTF-8"?><databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

<changeSet id="201505111301" author="sr">
<createTable tableName="table_person">
<column name="table_person_id" type="int" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false" />
</column>
</createTable>

<insert tableName="table_person">
<column name="name" value="TestValue1" type="varchar(255)"/>
</insert>
<insert tableName="table_person">
<column name="name" value="TestValue2" type="varchar(255)"/>
</insert>

<renameColumn oldColumnName="table_person_id" newColumnName="id" tableName="table_person" columnDataType="int"/>
</changeSet>

我尝试使用以下方法修复该问题:

<addAutoIncrement tableName="table_person" columnName="id" columnDataType="int"></addAutoIncrement>

这将重新创建丢失的自动增量,但显然会再次从索引 0 开始。如果数据已经存在,这又会导致问题。

我的问题:

如何在不丢失 mySQL 数据库主键上的自动增量的情况下重命名 Liquibase 中的主键列?

(注意,在 postgreSQL 上,autoIncrement 在重命名主键列时不会丢失)

最佳答案

不幸的是,这是 mysql 的限制。 liquibase 运行的 SQL 是 alter table table_person change table_persion_id id int它将列重新定义为简单的“int”。

要使其保持自动递增,您需要使用 <modifySql>标记为 <append>自动递增/主键/不为空/等等。根据需要将信息添加到生成的 SQL 中。

关于mysql - 通过 Liquibase 重命名主键列,自动增量被删除(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30166652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com