MySQL Trigger с оператором SELECT - PullRequest
       18

MySQL Trigger с оператором SELECT

4 голосов
/ 29 октября 2009

Например, скажем, у меня есть эти таблицы ...

человек (id, текущий год)

personteam (id, рабочий год, команда)

Человеку назначается команда на каждый год работы в компании. 'personteam' хранит записи команд. Вставка в «personteam» допускается только в том случае, если поле «currentyear» в «person» равно «workyear» в «personteam».

Я хочу сделать некоторые проверки, когда пользователь вставляет в PERSON_TEAM, основываясь на том, что хранится в PERSON. Поэтому я пишу триггер с оператором выбора. Я не уверен на 100% в синтаксисе триггеров MySQL, так что, надеюсь, это имеет смысл ...

CREATE TRIGGER mytesttrigger ПЕРЕД ВСТАВКОЙ НА personteam

ДЛЯ КАЖДОГО РЯДА

SELECT currentyear AS @variablename
FROM person p
WHERE p.id = NEW.id

IF @variablename != NEW.workyear
ERROR 

END

Может ли кто-нибудь предоставить пересмотренный, исправленный синтаксис для такой операции?

Спасибо.

(Этот пример тривиален, поэтому я могу выучить, поэтому извините, как бессмысленно это звучит)

1 Ответ

3 голосов
/ 29 октября 2009

В соответствии со стандартом MySQL, правильным способом обработки этой команды будет команда SIGNAL для возврата ошибки клиенту. так как это триггер BEFORE, ошибка в триггере не позволит mysql двигаться дальше и вставлять строку.

Однако mysql еще не поддерживает SIGNAL, поэтому нам нужно найти способ вызвать произвольную ошибку.

Один из способов сделать это - ВЫЗВАТЬ несуществующую процедуру, , как показано здесь .

Лучше было бы удалить права INSERT из этой таблицы и вместо этого использовать хранимую процедуру для обработки вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...