【问题标题】:liquibase : error with malformed foreign keyliquibase:外键格式错误
【发布时间】:2016-03-24 09:43:46
【问题描述】:

我有这个创建语句:

    <addPrimaryKey 
        constraintName="pk_sitetv_consultant"
        columnNames="consultants_id, sitetv_id" 
        tableName="sitetv_consultant"/>

    <addForeignKeyConstraint baseColumnNames="sitetv_id"
                             baseTableName="sitetv_consultant"
                             constraintName="fk_sitetv_consultant_sitetv_id"
                             referencedColumnNames="id"
                             referencedTableName="site_tv"/>

    <addForeignKeyConstraint baseColumnNames="consultants_id"
                             baseTableName="sitetv_consultant"
                             constraintName="fk_sitetv_consultant_consultant_id"
                             referencedColumnNames="id"
                             referencedTableName="consultant"/>

但是当我运行 webapp 时,我遇到了这个错误:

2016-03-24 10:34:31.537 ERROR 7322 --- [lley-Executor-1] c.t.r.c.liquibase.AsyncSpringLiquibase   : Liquibase could not start correctly, your database is NOT ready: Migration failed for change set classpath:config/liquibase/changelog/20160324092108_changelog.xml::1458811279836-12::tv (generated):
     Reason: liquibase.exception.DatabaseException: Error on rename of './m/#sql-522_bc' to './myApp/sitetv_consultant' (errno: 150 - Foreign key constraint is incorrectly formed) [Failed SQL: ALTER TABLE myApp.sitetv_consultant DROP PRIMARY KEY]

liquibase.exception.MigrationFailedException: Migration failed for change set classpath:config/liquibase/changelog/20160324092108_changelog.xml::1458811279836-12::tv (generated):
     Reason: liquibase.exception.DatabaseException: Error on rename of './myApp/#sql-522_bc' to './myApp/sitetv_consultant' (errno: 150 - Foreign key constraint is incorrectly formed) [Failed SQL: ALTER TABLE myApp.sitetv_consultant DROP PRIMARY KEY]
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:590) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.Liquibase.update(Liquibase.java:212) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.Liquibase.update(Liquibase.java:192) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:434) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:391) ~[liquibase-core-3.4.2.jar:na]
    at com.tv.myApp.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:63) ~[classes/:na]
    at com.tv.myApp.config.liquibase.AsyncSpringLiquibase.lambda$0(AsyncSpringLiquibase.java:49) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_74]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_74]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74]
Caused by: liquibase.exception.DatabaseException: Error on rename of './myApp/#sql-522_bc' to './myApp/sitetv_consultant' (errno: 150 - Foreign key constraint is incorrectly formed) [Failed SQL: ALTER TABLE myApp.sitetv_consultant DROP PRIMARY KEY]
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:301) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:107) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1251) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1234) ~[liquibase-core-3.4.2.jar:na]
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:554) ~[liquibase-core-3.4.2.jar:na]
    ... 11 common frames omitted
Caused by: java.sql.SQLException: Error on rename of './myApp/#sql-522_bc' to './myApp/sitetv_consultant' (errno: 150 - Foreign key constraint is incorrectly formed)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2505) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:840) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:740) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.zaxxer.hikari.proxy.StatementProxy.execute(StatementProxy.java:94) ~[HikariCP-2.4.1.jar:na]
    at com.zaxxer.hikari.proxy.HikariStatementProxy.execute(HikariStatementProxy.java) ~[HikariCP-2.4.1.jar:na]
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:299) ~[liquibase-core-3.4.2.jar:na]
    ... 16 common frames omitted

我的 xml 文件有什么问题?

【问题讨论】:

    标签: mysql liquibase


    【解决方案1】:

    可能是 Liquibase 生成多列主键的方式不正确。似乎 MySQL 确实支持多列主键(请参阅Multi-Column Primary Key in MySQL 5),但生成的 SQL 不正确。您可以尝试运行updateSQL 命令而不是update 命令来查看正在生成什么SQL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2019-03-23
      • 2020-11-12
      • 2021-03-01
      • 2020-04-14
      • 2019-10-02
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多