#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';