Отмена УДАЛИТЬ с ТРИГГЕРАМИ - PullRequest
2 голосов
/ 09 ноября 2011

Я хочу отменить ТРИГГЕР УДАЛЕНИЯ.Идея заключается в том, что ДО УДАЛЕНИЯ установите столбец hide = "Y", затем ОТМЕНИТЕ событие TRIGGER и НЕ УДАЛИТЕ строку.

Возможно?

1 Ответ

5 голосов
/ 17 ноября 2011

Вы можете отменить удаление, однако вы не можете изменить значения в триггере DELETE.

DELIMITER $$

CREATE TRIGGER bd_t1_each BEFORE DELETE ON t1 FOR EACH ROW
BEGIN
  //This will not work, because the `NEW` virtual table does not exist in a delete trigger.
  SET NEW.hide = 'Y';
  //Raising an error will work.
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DELETE canceled'; 
END $$

DELIMITER ;

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

DELIMITER $$

CREATE PROCEDURE delete_t1_row (pID INTEGER)
BEGIN
  UPDATE t1 SET hide = 'Y' WHERE id = pID;
END $$

DELIMITER ;
...