Если у меня есть trigger
before the update
таблица, как я могу выдать ошибку, которая препятствует обновлению этой таблицы?
174
Вот один хак, который может сработать. Это не чисто, но похоже, что это может сработать:
По сути, вы просто пытаетесь обновить столбец, который не существует.
Начиная с MySQL 5.5, вы можете использовать
SIGNAL
синтаксис для генерации исключения :Состояние 45000 является общим состоянием, представляющим «необработанное пользовательское исключение».
Вот более полный пример подхода:
источник
К сожалению, ответ, предоставленный @RuiDC, не работает в версиях MySQL до 5.5, потому что нет никакой реализации SIGNAL для хранимых процедур.
Решение, которое я нашел, состоит в том, чтобы смоделировать сигнал, выдающий
table_name doesn't exist
ошибку, помещая настроенное сообщение об ошибке вtable_name
.Взлом может быть реализован с помощью триггеров или с помощью хранимой процедуры. Я опишу оба варианта ниже, следуя примеру, используемому @RuiDC.
Использование триггеров
Использование хранимой процедуры
Хранимые процедуры позволяют использовать динамический sql, что делает возможным инкапсуляцию функциональности генерации ошибок в одной процедуре. Суть в том, что мы должны контролировать методы вставки / обновления приложений, чтобы они использовали только нашу хранимую процедуру (не предоставляя прямые привилегии INSERT / UPDATE).
источник
Следующая процедура - это (на mysql5) способ генерировать пользовательские ошибки и регистрировать их одновременно:
источник
источник
Еще один (хакерский) метод (если вы по какой-то причине не пользуетесь версией 5.5+), который вы можете использовать:
Если у вас есть обязательное поле, то в триггере установите для обязательного поля недопустимое значение, например, NULL. Это будет работать как для вставки и обновления. Обратите внимание, что если NULL является допустимым значением для обязательного поля (по какой-то безумной причине), тогда этот подход не будет работать.
Если у вас 5.5+, вы можете использовать состояние сигнала, как описано в других ответах:
источник
источник