Вы можете отменить удаление, однако вы не можете изменить значения в триггере 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 ;