2016-03-27 7 views
0

Ich bin ein bisschen verwirrt, nachdem eine Menge Online über die Verwendung von Trennzeichen für Stored Procedures und Trigger usw.phpMyadmin DELIMITER Fehler True oder False?

Von meinem Verständnis eines Trigger-Block geschrieben werden sollte als solche in Bezug auf das Trennzeichen zu lesen:

DROP TRIGGER IF EXISTS innovationevents.Task9Trigger1; 
DELIMITER // 
CREATE TRIGGER innovationevents.Task9Trigger1 
BEFORE INSERT ON innovationevents.tblattendees 
FOR EACH ROW 
BEGIN 

INSERT INTO innovationevents.tblregistration 
(RegistrationID, AttendeeID, EventID, RegistrationDate, RegistrationPaid) 
VALUES (40, new.AttendeeID, 3, CURDATE(), 0); 

END // 

Nun die Sache damit ist, bekomme ich eine Fehlermeldung in phpMyadmin, noch läuft der Code noch. Ich denke, vielleicht ist es falsch? Oder gibt es eine komplexere Erklärung dafür, warum mein Code falsch ist? wirklich nervt mich diese Störung zu sehen, die ganze Zeit: P

enter image description here

Antwort

1

Die DELIMITER Richtlinie nicht auf die MySQL-Datenbank gehört, sondern dem mysql Kommandozeilen-Client.

Normalerweise erkennt mysql das Semikolon (;) als Eingabe-Ende-Markierung, die bewirkt, dass es den aktuellen Inhalt des Befehlspuffers zur Ausführung an die Datenbank sendet. Die Verwendung der DELIMITER Direktive erlaubt Ihnen, einen zusammengesetzten Befehl (z. B. den Körper eines CREATE PROCEDURE) mit den einfachen Befehlen der Komponente einzugeben, die durch Semikolons beendet werden, ohne ein vorzeitiges Ende der Eingabe auszulösen.

MySQL Workbench erfordert auch die Verwendung der DELIMITER Direktive, aber andere Clients nicht, einschließlich (wie ich mich erinnere) phpMyAdmin. Es wäre leicht für Sie, dies experimentell zu überprüfen.

+0

Schönen Dank für die Erläuterung, die jetzt mehr Sinn macht, warum es benötigt wird. Ich sehe jedoch nicht, warum Workbench es erfordert. Ich werde das testen :) – RiCHiE

Verwandte Themen