Подтвердить что ты не робот

Используйте триггер для остановки вставки или обновления

Так как MySQL игнорирует контрольные ограничения, как можно использовать триггер для остановки вставки или обновления?

Например:

Таблица foo имеет атрибут, называемый агентством, а атрибут агентства может быть только 1, 2, 3, 4 или 5.

delimiter $$
create trigger agency_check
before insert on foo
for each row
begin
if (new.agency < 1 or new.agency > 5) then

#Do nothing?

end if;
end
$$
delimiter ;

Или есть ли лучший способ сделать контрольные ограничения в MySQL?

4b9b3361

Ответ 1

Попробуйте синтаксис СИГНАЛА - https://dev.mysql.com/doc/refman/5.5/en/signal.html

create trigger agency_check
before insert on foo
for each row
begin
  if (new.agency < 1 or new.agency >5) then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message';
  end if 
end

EDIT

Обновлено на основе популярного комментария ниже Биллом Карвином.

Ответ 2

Если ваша версия MySQL старше 5.5, попробуйте установить ненулевое поле таблицы в NULL. Это взлом, но это предотвращает завершение обновления или вставки.

Команда SIGNAL, которую предлагает Naveen, выглядит великолепно, и я с нетерпением жду ее использования после обновления.