Используйте триггер для остановки вставки или обновления
Так как 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?
Ответы
Ответ 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, выглядит великолепно, и я с нетерпением жду ее использования после обновления.