我无法从MySql中删除记录

时间:2010-06-03 14:45:40

标签: php sql mysql html database

我有两张桌子。表格参考表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中我也无法删除a如果b仍然存在,所以我先删除b。

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

这些表是alla InnoDB。

我该怎么办?

由于

2 个答案:

答案 0 :(得分:2)

MySQL manual说多表DELETE和外键:

  

如果使用多表DELETE   涉及InnoDB表的声明   哪个有外键   约束, MySQL优化器可能   按顺序处理表   不同于他们的   父母/子女关系。在这   声明,声明失败并滚动   背部。相反,你应该删除   单表并依靠ON   删除功能即InnoDB   提供导致其他表   相应修改。

因此,当主表中的记录被删除时,其外来引用也是如此,例如:

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

答案 1 :(得分:0)

您的删除语法无效。您需要在两个语句中执行此操作(除非提到nuqqsa,否则在表a和表b之间的关系上启用了CASCADE DELETE):

Delete From b
Where Exists    (
                Select 1
                From a
                Where a.poster_password = '$pass'
                    And a.ad_id = '$id'
                    And a.classified_id = b.classified_id
                )

Delete From a
Where a.poster_password = '$pass'
    And a.ad_id = '$id'

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