2009-07-09 11 views
14

Dieses MySQL-Skript installiert mehrere Trigger.MySQL DELIMITER-Syntaxfehler

Es funktioniert auf einem Rechner mit MySQL 5.0.51b-Community. Auf einem anderen Computer, auf dem MySQL 14.12 Distrib 5.0.45 ausgeführt wird, schlägt es für redhat-linux-gnu (i386) mit dieser Fehlermeldung fehl, die mit der verknüpft zu sein scheint; Syntax:

Fehler 1064 (42000) bei Zeile 272: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, nach der richtigen Syntax für die Verwendung in der Nähe von 'DELIMITER; DROP TRIGGER IF EXISTS trigger_name; DELIMITER‘at line 1

Das Skript Syntax (zusammengefasst) ist:

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name BEFORE UPDATE ON table 
FOR EACH ROW BEGIN 
    -- Trigger logic goes here 
END // 
DELIMITER; 

-- More trigger drop/create statements follow 

Was mit dem Skript falsch ist, und wie kann ich es beheben?

Antwort

22

DELIMITER ; 

nicht

DELIMITER; 

Du eigentlich ; als Argument für den DELIMITER Befehl spezifiziert, so haben nicht den Raum da sein, es verwirrend kann.

+0

ich nicht, dass ahnten, vielen Dank für Erklärung :) – Sophia

4

Sie brauchen ein Leerzeichen zwischen 'DELIMITER' und ';' Versuchen

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm Ich habe ähnliche Probleme. Ich mache eine mysqldump von Debian Lenny läuft 5.0.51 und versuchen, zu OpenSolaris mit 5.0 zu importieren und den gleichen Fehler zu erhalten. Und ich habe DELIMITER;

Versionskonflikt?

+0

Es schien für uns Versionen verwandt zu sein, arbeitete eine Version ohne Semikolon, arbeitete eine andere nur mit einem Semikolon und ein anderer benötigt ein Semikolon und kein Leerzeichen. – Sophia

2

nur als Add-on, für jemanden anderen:

Das Trennzeichen ist erforderlich, um die gesamte Definition zu ermöglichen, an den Server als eine einzige Anweisung zu übergeben.

0

Versuchen Sie die folgenden.

Ich bin sicher, dass es den Zweck lösen sollte.

DELIMITER + 
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS, 
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; + 

Von den oben genannten, wenn wir einen DELIMITER verwenden. Es soll ich die gleichen Fehler verwende In der Version von MySQL in Form von

DELIMITER + 
-- 
BLOCK OF SQL WHATEVER YOU WANT TO MENTION 
-- 
+ 
1

sein treten auf, wenn das Trennzeichen Befehl, aber diese Version übernimmt das Trennzeichen „;“ für Anweisungen und Trennzeichen "|" für gespeicherte Prozeduren und Funktionen, von denen ich denke, dass sie das Problem lösen; dies versuchen:

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

+0

Welche Version wäre das? –