Ich vermute, dass das Problem mit der Aussage Trennzeichen ist; Ich vermute, dass es immer noch auf das Semikolon gesetzt ist.
Da der Auslöser Semikolon Zeichen enthält, erhalten die „create trigger“ Anweisung als eine Einheit ausgeführt werden, müssen Sie das Trennzeichen in eine Zeichenfolge ändern, die nicht überall auftreten innerhalb der „create trigger“ Anweisung
zum Beispiel:
-- 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 ;
auch denke ich ein Trigger nicht erlaubt ist, aus derselben Tabelle auszuwählen, die in gerade eingefügt wurde. (Ich weiß, das ist eine Einschränkung von FOR EACH ROW Triggern in Oracle; ich müsste das MySQL Reference Manual konsultieren, um sicher zu gehen ... es gibt einen Abschnitt über "Einschränkungen für mysql gespeicherte Programme", Prozeduren sind die liberalsten, Funktionen haben dieselben Einschränkungen wie Prozeduren, plus mehr, und Trigger haben die gleichen Einschränkungen wie Funktionen und mehr
Auch wenn dieser Trigger ausgeführt wird (wenn es erlaubt ist, aus derselben Tabelle auszuwählen), ist die SELECT-Anweisung wahrscheinlich zurückgeben mehr als eine Zeile Mit INTO
Formular erwarten wir höchstens eine Zeile zurückgegeben
Wenn die Absicht ist, die Werte der Zeile, die gerade eingefügt wurde, verweisen, und verwenden Sie diese in einer Einfügung in eine andere Zeile Tabelle fiends
(oder friends
? ) verwenden Sie das Formular NEW.column_name
die Werte
Zum Beispiel zu verweisen:
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 einen guten Punkt angehoben, die mich dazu gebracht, meine erste Antwort zu löschen. Meine Fragen für Sie sind: Was ist der Zweck dieses Auslösers? und welchen Datenbank-Client benutzen Sie? –
Ich denke, es gibt mehrere Probleme. Ich habe die meisten von ihnen in meiner Antwort angesprochen. Es ist nicht angegeben, welchen Client Sie verwenden, wie Sie den Trigger erstellen. Einige GUI-Clients verfügen möglicherweise über einen "create trigger" -Editor, der die Trennzeichen automatisch für Sie verarbeitet. Ich schlage vor, Sie entwickeln den Auslöser in Phasen. Als erste Stufe empfehle ich Ihnen, mit einem Auslöser mit einem fast leeren, fast nichts, Körper zu beginnen. Und dann baue von dort aus. – spencer7593
Als nächste Stufe müssen Sie bestimmen, was Ihr Trigger tun soll. Eine oder zwei Kommentarzeilen, die den Zweck des Auslösers angeben, würden nicht schaden. Zu wissen, was der Trigger tun soll, ist ein langer Weg, um ihn zu schreiben. Anhand der Antworten können Sie sehen, dass Gordon und ich sehr unterschiedliche Vorstellungen davon hatten, was der Auslöser bewirken würde. – spencer7593