Я не могу удалить записи из MySql

У меня есть две таблицы. представьте в виде таблицы ссылочную таблицу 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 все еще там, таким образом, я удаляю b сначала.

Но что решает порядок, в котором на первом месте?

Таблицы являются alla InnoDB.

Что мне делать?

Спасибо

1
задан 3 June 2010 в 14:45
поделиться

2 ответа

Ваш синтаксис удаления недействителен. Вам нужно сделать это в двух инструкциях (если, как указано в nuqqsa, у вас включен CASCADE DELETE для связи между таблицей a и таблицей b):

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'

Что решает, что будет первым, так это отношения внешних ключей. Какая бы таблица ни была родительской, ее необходимо удалить из последней.

0
ответ дан 3 September 2019 в 00:05
поделиться

Руководство MySQL говорит о многостоличном DELETE и внешних клавишах:

Если вы используете многостоличный DELETE оператор, включающий таблицы InnoDB для у которых есть внешний ключ ограничения, может оптимизатор MySQL обрабатывать таблицы в том порядке, который отличается от их отношения родитель/ребёнок. В этом Case, оператор завершается сбоем и сворачивается Назад. Вместо этого вы должны удалить из единая таблица и положитесь на ON ВОЗМОЖНОСТИ УДАЛЕНИЯ InnoDB Предоставляется для того, чтобы другие таблицы быть изменены соответствующим образом.

Таким образом, когда запись в вашей основной таблице удаляется, удаляются и ее внешние ссылки, например:

ALTER TABLE products
  ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name)
      ON DELETE CASCADE;
2
ответ дан 3 September 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: