Задавайте вопросы, мы ответим
Вы не зашли.
Мне нужно запретить удаление записи после проверки определённых условий.
Ничего не могу придумать, кроме как внесения в тело триггера заведомо ложного выражения, например так:
CREATE DEFINER = 'root@localhost' TRIGGER `testtable_before_del_tr` BEFORE DELETE ON `testtable`
FOR EACH ROW
BEGIN
DECLARE abc INT;
SELECT COUNT(*) FROM `checked_table` WHERE `checked_table`.`id` = OLD.id INTO @abc;
IF @abc > 0
SELECT * FROM aaaaaa INTO @abc; /* Преднамеренная ошибка - несуществующая таблица */
END IF;
END;
Можно ли запретить удаление более цивилизованными средствами?
Заранее благодарен!
Неактивен
Цивилизовано через триггер в MySQL запретить удаление нельзя. Корректно было бы удалять всегдо одной процедурой, а в ней прописать условие. Права на удаление из данной таблицы у пользователя убрать, а у создателя процедуры оставить.
Неактивен
Не удовлетворён ответом. Если моя фишка проскакивает, значит имеются недокументированные возможности, которые разработчики почему то временно замалчивают. Может ещё кто-то из аксакалов работал над этой проблемой. Похоже, триггер обрубает удаление при появлении булева ноля на его выходе. Так можно ли надуть этот злосчастный триггер без нездоровой реакции системы (без сообщения об ошибке)?
Неактивен
Я привел официальный ответ. Ваша фишка также известна как один из способов обхода. Есть или нет недокументированные возможности не так важно, так как никто не обещает, что они работают. Ошибка в триггере прекратит выполнение всего запроса, а не только удаление одной записи.
Неактивен