Php 我能';t从MySql中删除记录

Php 我能';t从MySql中删除记录,php,sql,mysql,html,database,Php,Sql,Mysql,Html,Database,我有两张桌子。我相信表a参考了表b 当我尝试像这样一起删除包时: $query="DELETE a, b FROM classified as a, $sql_table as b WHERE a.ad_id = '$id' AND a.classified_id = b.classified_id AND a.poster_password='$pass'"; b我想必须先删除。 即使在PhpMyAdmin中,如果b仍然存在,我也不能删除a,所以我先删除b 但是什么决定了先到的顺序呢 这些

我有两张桌子。我相信表a参考了表b

当我尝试像这样一起删除包时:

$query="DELETE a, b FROM classified as a, $sql_table as b WHERE a.ad_id = '$id' 
AND a.classified_id = b.classified_id AND a.poster_password='$pass'";
b我想必须先删除。 即使在PhpMyAdmin中,如果b仍然存在,我也不能删除a,所以我先删除b

但是什么决定了先到的顺序呢

这些表是alla InnoDB

我该怎么办


谢谢

您的删除语法无效。您需要在两条语句中执行此操作(除非如nuqqsa所述,您已经在表a和表b之间的关系上启用了级联删除):

决定哪个先到的是外键关系。无论哪个表是父表,都必须从最后一个表中删除。

关于多表删除和外键:

如果使用多表删除 涉及InnoDB表的语句 哪些是外键 约束,MySQL优化器可能 按以下顺序处理表: 不同于他们的 父/子关系。在这个 在这种情况下,语句失败并滚动 返回相反,您应该从中删除 一张桌子和一张桌子靠在一起 删除InnoDB提供的功能 提供以使其他表 应作相应修改

这样,当主表中的记录被删除时,其外部引用也会被删除,例如:

ALTER TABLE products
  ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name)
      ON DELETE CASCADE;

引用键之所以如此,是因为我在显示记录时使用了JOIN。。。正如你所知。我猜你是SQL server用户?@SimpleMotions-Me?我是,但是上述语法的等价物应该适用于任何数据库产品。@Thomas-您的SQL风格就是我所评论的全部。@simplemotions-Np。虽然,我与Oracle合作过,我使用相同的风格。托马斯:看看这个问题,我很难让上面的代码正常工作:
ALTER TABLE products
  ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name)
      ON DELETE CASCADE;