Андрей
Высший разум
(425879)
5 лет назад
Если у тебя внешние ключи с ON DELETE CASCADE, то при удалении записи из главной таблицы НЕ надо явно удалять записи из подчинённых таблиц. Все связанные записи из подчинённых таблиц будут удалены автоматически.
Роман ProtocolМыслитель (8562)
5 лет назад
> внешние ключи с ON DELETE CASCADE
Нет.
Где указывать эту конструкцию, в смысле в каком месте объявления таблицы?
Если указать ON DELETE CASCADE побочных эффектов не будет?
Тогда (tckb nf,kbws c ON DELETE CASCADE) запрос так можно выполнять?:
DELETE FROM Professions_List
WHERE idProfessions_List = :idProf
Иван Иванов
Мудрец
(17783)
5 лет назад
Ну если Records - это таблица с Primary Key, то удалять запись из неё надо в последнюю очередь. В принципе, второй запрос должен работать...
Ну и как всегда, костыльное решение: сохранять id удаляемого объекта, удалять объект из одной таблицы запросом, потом находить запись в другой таблице по этому id, снова удалять и тп. Работать будет крайне медленно, но хоть что-то))
Даниил Казнин
Знаток
(340)
5 лет назад
Помогите решил сделать свое сервер самп, я начал загружать БД и там ошибка
Даниил Казнин Ученик (103), Вопрос открыт 3 минуты назад
Ошибка
SQL-запрос:
-- --------------------------------------------------------
--
-- Структура таблицы `adminlog`
--
CREATE TABLE `adminlog` (
`ID` INT( 11 ) NOT NULL ,
`Name` VARCHAR( 24 ) NOT NULL ,
`Data` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`nakaz` VARCHAR( 24 ) CHARACTER SET cp1251 NOT NULL ,
`Names` VARCHAR( 24 ) CHARACTER SET cp1251 NOT NULL ,
`reason` VARCHAR( 100 ) CHARACTER SET cp1251 NOT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
Ответ MySQL: Документация
#1067 - Invalid default value for 'Data'
Написал запросы на MySQL для пакетного удаления строк из нескольких связанных таблиц. Нужно удалить все записи, что относятся к профессии по переданному id.
1 вариант
DELETE Records,
Exe_service,
List_of_service,
List_of_master_service,
Professions_List
FROM Records
RIGHT JOIN Exe_service
ON Records.Exe_service_Executors_idExecutors = Exe_service.Executors_idExecutors
RIGHT JOIN List_of_service
ON Exe_service.List_of_service_idList_of_service = List_of_service.idList_of_service
RIGHT JOIN List_of_master_service
ON List_of_service.List_of_master_service_idList_of_master_service = List_of_master_service.idList_of_master_service
RIGHT JOIN Professions_List
ON List_of_master_service.Professions_List_idProfessions_List = Professions_List.idProfessions_List
WHERE Professions_List.idProfessions_List = :idProf
2 вариант
DELETE Professions_List,
List_of_master_service,
List_of_service,
Exe_service,
Records
FROM Professions_List
LEFT JOIN List_of_master_service
ON Professions_List.idProfessions_List = List_of_master_service.Professions_List_idProfessions_List
LEFT JOIN List_of_service
ON List_of_master_service.idList_of_master_service = List_of_service.List_of_master_service_idList_of_master_service
LEFT JOIN Exe_service
ON List_of_service.idList_of_service = Exe_service.List_of_service_idList_of_service
LEFT JOIN Records
ON Exe_service.Executors_idExecutors = Records.Exe_service_Executors_idExecutors
WHERE Professions_List.idProfessions_List = :idProf
В обоих случаях выдаётся ошибка: #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`vistae0f_roma`.`List_of_master_service`, CONSTRAINT `List_of_master_service_ibfk_1` FOREIGN KEY (`Professions_List_idProfessions_List`) REFERENCES `Professions_List` (`idProfessions_List`) ON)
Я понимаю, что там ключ связан, но удалить как - то надо.
Я не пойму как правильно запрос выстроить, чтобы сразу удалялось из таблиц связанные строки.
Спасибо за ответы!