Я подозреваю, что проблема с разделителем заявление; Я подозреваю, что он по-прежнему установлен на символ с запятой.
Так как триггер содержит точку с запятой, чтобы получить «создать триггер» заявление для запуска в качестве одной единицы, вы должны изменить разделитель в строку, которая не возникает в любом месте «триггера создать» заявление
Например:
-- change the statement delimiter to something other than semicolon
DELIMITER $$
-- execute the "create trigger" statement containing semicolons
CREATE TRIGGER ...
BEGIN
... ;
... ;
IF (...) THEN
... ;
END IF;
... ;
END$$
-- the occurrence of the $$ delimiter on the line above ends the statement
-- change the delimiter back to semicolon
DELIMITER ;
Кроме того, я думаю, триггер не допускается, чтобы выбрать из той же таблицы, которая была только что вставили в. (Я знаю, что это ограничение для триггеров FOR EACH ROW в Oracle, я должен был бы проконсультироваться с Справочным руководством MySQL, чтобы убедиться ... есть раздел «Ограничения на хранимые программы mysql», процедуры являются наиболее либеральными, функции те же ограничения, что и процедуры, плюс больше, и триггеры имеют те же ограничения, что и функции, плюс больше.
Кроме того, когда этот триггер выполняется (если разрешено выбирать из той же таблицы), этот оператор SELECT, скорее всего, возвращаем более одной строки. С формой INTO
мы ожидаем не более одной строки для возврата.
Если целью является ссылка на значения строки, которая была только что вставлена, и использовать их в вставке в другую таблица fiends
(или friends
?) использовать форму NEW.column_name
ссылаться на значения
Например:
DELIMITER $$
CREATE TRIGGER profile_ai
AFTER INSERT ON profile
FOR EACH ROW
BEGIN
IF (NEW.fpage = 'yes') THEN
-- are some of your friends fiends ?
INSERT INTO fiends
(req_id
, resp_id
, req_name
, resp_name
, fpage
) VALUES
(NEW.profile_id
, NEW.profile_id
, NEW.fname
, NEW.fname
, 'yes'
);
END IF;
END$$
DELIMITER ;
spencer7593 поднявших хороший момент, который привел меня, чтобы удалить мой первый ответ. Мои вопросы для вас: Какова цель этого триггера? и какой клиент базы данных вы используете? –
Я думаю, что есть несколько вопросов. Я обратился к большинству из них в мой ответ. Не указано, какой клиент вы используете, как вы создаете триггер. Некоторые клиенты GUI могут иметь редактор «create trigger», который автоматически обрабатывает разделители для вас. Я предлагаю вам развить триггер поэтапно. В качестве первого этапа я бы рекомендовал начать с триггера с почти пустым, почти ничего, тела. А потом постройте оттуда. – spencer7593
Как следующий этап, вам нужно определить, что должен делать ваш триггер. Строка комментария или два, указывающая на назначение триггера, не повредит. Знать, что вы хотите, чтобы запустить триггер, - это долгий путь к его написанию. Из ответов вы можете видеть, что мы с Гордоном ушли с совершенно разными представлениями о том, что пытался совершить триггер. – spencer7593