SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.10.2008 16:56:04

loshhilov
Участник
Зарегистрирован: 22.10.2008
Сообщений: 2

Запрет удаления через триггер BEFORE DELETE

Мне нужно запретить удаление записи после проверки определённых условий.
Ничего не могу придумать, кроме как внесения в тело триггера заведомо ложного выражения, например так:

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;

Можно ли запретить удаление более цивилизованными средствами?
Заранее благодарен!

Неактивен

 

#2 22.10.2008 16:58:39

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запрет удаления через триггер BEFORE DELETE

Цивилизовано через триггер в MySQL запретить удаление нельзя. Корректно было бы удалять всегдо одной процедурой, а в ней прописать условие. Права на удаление из данной таблицы у пользователя убрать, а у создателя процедуры оставить.

Неактивен

 

#3 22.10.2008 19:25:56

loshhilov
Участник
Зарегистрирован: 22.10.2008
Сообщений: 2

Re: Запрет удаления через триггер BEFORE DELETE

Не удовлетворён ответом. Если моя фишка проскакивает, значит имеются недокументированные возможности, которые разработчики почему то временно замалчивают. Может ещё кто-то из аксакалов работал над этой проблемой. Похоже, триггер обрубает удаление при появлении булева ноля на его выходе. Так можно ли надуть этот злосчастный триггер без нездоровой реакции системы (без сообщения об ошибке)?

Неактивен

 

#4 22.10.2008 19:30:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запрет удаления через триггер BEFORE DELETE

Я привел официальный ответ. Ваша фишка также известна как один из способов обхода. Есть или нет недокументированные возможности не так важно, так как никто не обещает, что они работают. Ошибка в триггере прекратит выполнение всего запроса, а не только удаление одной записи.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson