【发布时间】:2021-12-21 06:34:48
【问题描述】:
我有一个名为 event 的表,它已经有一个主键。我在事件表中保存了一些记录。现在我想为同一个表添加一个自动增量列。我创建了一个新的 changelog.xml 文件并在 xml 中添加了以下内容。
<changeSet author="user" id="1">
<addColumn tableName="event">
<column name="id" type="BIGINT" >
<constraints nullable="false" unique="true" uniqueConstraintName="event_id_auto_increment" />
</column>
</addColumn>
<addAutoIncrement incrementBy="1" tableName="event" columnName="id" columnDataType="BIGINT" />
</changeSet>
但我在启动应用程序时遇到了异常。
Caused by: liquibase.exception.DatabaseException: Duplicate entry '0' for key 'id' [Failed SQL: (1062) ALTER TABLE event ADD UNIQUE (id)]
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:393)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:82)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:150)
at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1278)
at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1260)
at liquibase.changelog.ChangeSet.execute(ChangeSet.java:637)
... 169 common frames omitted
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'id'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:762)
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:646)
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94)
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:389)
... 174 common frames omitted
新列 id 已在事件表中创建,所有现有行的值为 0。但并没有增加。有人可以帮我弄这个吗?任何帮助,将不胜感激。谢谢
【问题讨论】:
标签: mysql spring-boot liquibase