【问题标题】:How to delete a row from a MySQL table when there is a foreign key constraint?存在外键约束时如何从 MySQL 表中删除一行?
【发布时间】:2018-05-09 20:50:33
【问题描述】:

我试图通过http://localhost/phpmyadmin 从表中删除条目。 它返回以下错误:

“无法删除或更新父行:外键约束失败 (press.prodstock, CONSTRAINT fk_prodstock_prodlist1 FOREIGN KEY (item_code) REFERENCES prodlist (id) ON DELETE NO ACTION ON UPDATE NO ACTION) "

我写了一个 JAVA 代码从 NetBeans 中删除它:

 private void loginBut46ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (prodlist.getSelectedRowCount() == 0) {

            JOptionPane.showMessageDialog(rootPane, "Select Raw to View!");

        } else {
            int r = prodlist.getSelectedRow();
            String id = prodlist.getValueAt(r,0).toString();
            String item_code = prodlist.getValueAt(r,1).toString();
        try {
           DB.DB.statement("delete from prodlist where id = '"+id+"' ");
            DB.DB.statement("delete from prodstock where item_code='"+item_code+"'");
        } catch (Exception ex) {
            Logger.getLogger(Stock.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    }  

【问题讨论】:

  • 您必须在引用数据之前删除引用数据。
  • DB.DB.statement("从 prodstock 中删除 item_code='"+item_code+"'"); DB.DB.statement("从产品列表中删除 id = '"+id+"' ");这是正确的顺序@Uueerdo 吗?
  • 您不能删除父级,因为它在其他表中仍有一些引用数据。您必须先删除引用的数据,然后再删除父数据。您还可以在引用的表上设置ON DELETE CASCADE,这将在删除父数据时删除引用的数据。更多可以在这个链接上找到。 mysqltutorial.org/mysql-on-delete-cascade
  • @DilankaDias 是的,只需将它们从问题中的情况交换过来就足够了。

标签: java mysql netbeans foreign-keys wampserver


【解决方案1】:

删除由其他数据引用的数据(以及由外键约束强制执行的引用)时,您必须先删除引用数据或更新引用数据以不再引用它(或设置约束以执行一个或另一个自动为您服务)。

可以删除约束,做你需要做的,然后重新添加约束(这在某些自引用或循环引用的情况下可能是必要的);但这应该是最后的手段,因为您基本上是在告诉数据库“让我暂时打破数据合同”;如果出现问题,则可能无法重新添加约束。它还消除了全局约束,允许任何客户端在此期间违反合同。

【讨论】:

    【解决方案2】:

    要删除这一行,首先需要删除外键约束。 您无法删除已删除外键约束的主键数据单元。 请点击此链接:Cannot delete or update a parent row: a foreign key constraint fails

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多