Как создать триггер «перед вставкой», который просматривает несколько таблиц

#mysql #triggers #insert

#mysql #триггеры #вставить

Вопрос:

Я изо всех сил пытаюсь понять формат для создания триггера ‘insert before’, который должен соответствовать условиям других таблиц.

Например, если у меня есть таблица с именем «заимствовано», в которую я хотел бы вставить значения, но она должна соответствовать условиям из другой таблицы с именем «член». Условием является то, что MemberStatus = ‘regular’. Если это условие пройдет, я смогу запустить «вставить в заимствованный», но если условия не будут выполнены, он не сможет пройти.

Так я раньше понимал концепцию, но после нескольких часов чтения я запутался. Любая помощь будет оценена.

 delimiter //
drop trigger if exists trigger1
//

create trigger trigger1
before insert on borrowed
for each row

begin
if...
end if;
end;
//
  

Комментарии:

1. Вы, вероятно, не стали бы вставлять в таблицу, которую запускаете, из триггера, обрабатывающего вставку, но не стесняйтесь записывать значения в new столбцы псевдопотоков, чтобы изменить значения, которые в конечном итоге записываются в таблицу… Если вы просто хотите проверить, что значения, вставляемые в заимствованные, соответствуют чему-то в Member, и не выполнять вставку, если они этого не делают, тогда вы можете прочитать new значение, посмотреть его в Member (например, это плата между участниками. Нижний элемент и член. UpperFee), и если это не так, вызовите ошибку, чтобы предотвратить вставку

2. В mysql вы не можете выполнить действие (вставить / обновить / удалить) таблицу, которая запустила триггер в триггере, вы можете изменить свою логику и прервать вставку, если условие не выполнено. смотрите dev.mysql.com/doc/refman/8.0/en/signal.html

3. извините, я действительно запутался в описании. Caius верен. Я только проверяю, соответствует ли «вставка в» условиям (соответствие чему-либо в других таблицах), которые должны быть проверены в триггере. Возможно, есть фрагмент или макет, который вы можете предоставить в качестве примера, чтобы помочь мне визуально.