在非常简单的表上运行下面的sql语句时,我会收到下面的错误。这里使用的唯一外键是表runs中的外键,外键是引用samples.id的runs.sample_id键。我不知道为什么要收到这个错误,因为在删除它们所依赖的示例之前,我尝试删除所有的运行。代码如下:
java代码:
字符串deleteRunsQuery =“从运行中删除”;//从运行表中删除行deleteSamplesQuery =“从示例中删除”;//删除示例表中的行
stmt.executeUpdate(deleteRunsQuery);
stmt.executeUpdate(deleteSamplesQuery);
例外是:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(gc_image_relational.runs,约束sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown外键(sample_id)在sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown方法中引用samples (id))在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown源(在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown源)在java.lang.reflect.Constructor.newInstance(Unknown源)在com.mysql.jdbc.Util.handleNewInstance(Util.java:400) (在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:上)在com.mysql.jdbc.Util.getInstance(Util.java:383)上在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2541) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1604) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1535)在com.gcimage.relational.RelationalDatabaseTest.disposeDb(RelationalDatabaseTest.java:40)
发布于 2015-12-06 19:21:55
恐怕没有足够的代表发表评论。也许这可以算作答案:
您的问题标记为mysql,但您没有清楚地说明所使用的编程语言;显然它是Java。AFAIK异步工作,即引擎在执行下一个语句之前不等待语句完成。在这种情况下,这意味着第二个DELETE语句(在samples表上)将在MySQL引擎完成DELETEing所有runs之前触发。在第一个回调中触发第二个DELETE将避免这个问题,或者任何其他同步这两个语句的方法。不知道你是怎么做到的,我不是Java程序员。其他人可能会在这方面帮助你。
发布于 2021-01-25 17:18:41
检查你的扳机OnDelete。您可能会尝试在删除后添加新记录,并得到一个键复制错误。
https://stackoverflow.com/questions/34121472
复制相似问题