Улучшение ответа @ Devart (принятого) с помощью комментария @ MathewFoscarini о MySQL SIGNAL Command вместо того, чтобы вызывать ошибку, вызывая несуществующую процедуру, вы можете сообщить свое пользовательское сообщение об ошибке.
DELIMITER $$
CREATE TRIGGER DeviceCatalog_PreventDeletion
BEFORE DELETE ON DeviceCatalog
FOR EACH ROW
BEGIN
IF old.id IN (1,2) THEN -- Will only abort deletion for specified IDs
SIGNAL SQLSTATE '45000' -- "unhandled user-defined exception"
-- Here comes your custom error message that will be returned by MySQL
SET MESSAGE_TEXT = 'This record is sacred! You are not allowed to remove it!!';
END IF;
END
$$
DELIMITER ;
SQLSTATE 45000 был выбран как Справочное руководство MySQL предлагает:
Чтобы указать общее значение SQLSTATE, используйте «45000», что означает «необработанное пользовательское исключение».
Таким образом, ваше пользовательское сообщение будет показано пользователю всякий раз, когда он пытается удалить записи с идентификатором 1
или 2
. Кроме того, если никакие записи не должны быть удалены из таблицы, вы можете просто удалить строки IF .. THEN
и END IF;
. Это предотвратит удаление ЛЮБЫХ записей в таблице.