Запрос на удаление нескольких таблиц не работает

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня есть база данных из 3 таблиц, и я пытаюсь удалить все эти таблицы одним запросом.

Запрос:

 DELETE FROM cranes 
JOIN craneparts ON cranes.id = craneparts.craneID 
JOIN parts ON parts.id = craneparts.partsID 
WHERE cranes.id = '$id'`
  

Кто-нибудь может помочь в том, почему этот запрос не работает? $id — это просто целое число PHP, и для моих целей тестирования $id = 2

Данная ошибка:

#1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘JOIN craneparts ON cranes.id = craneparts.craneID СОЕДИНЯТЬ детали НА parts.id = кран ‘ на линии 1`]

Ответ №1:

В вашем запросе должно быть указано, из каких таблиц вы хотите его удалить, даже если вы хотите удалить из всех таблиц.

 DELETE cranes, craneparts, parts
FROM cranes JOIN craneparts ON cranes.id = craneparts.craneID 
JOIN parts ON parts.id = craneparts.partsID 
WHERE cranes.id = '$id'
  

См. http://dev.mysql.com/doc/refman/5.6/en/delete.html для получения дополнительной документации.

Комментарии:

1. Спасибо. Это устраняет проблему номер один, но теперь я получаю эту ошибку Cannot delete or update a parent row: a foreign key constraint fails ('smithsv1'.'craneparts', CONSTRAINT 'fk_craneparts_cranes1' FOREIGN KEY ('craneID') REFERENCES 'cranes' ('ID') ON DELETE NO ACTION ON UPDATE NO ACTION) РЕДАКТИРОВАТЬ: исправлена блокировка кода ошибки

2. К сожалению, нет способа контролировать порядок удаления таблицы в режиме удаления нескольких таблиц. Вы должны определить свои внешние ключи с ON DELETE CASCADE помощью .

Ответ №2:

Вам нужно указать таблицы, из которых вы хотите удалить, после delete :

 DELETE cranes, craneparts, parts
    FROM cranes JOIN
         craneparts
         ON cranes.id = craneparts.craneID JOIN
         parts
         ON parts.id = craneparts.partsID
     WHERE cranes.id = '$id';