Andere als die Standardbegrenzer ;
werden normalerweise verwendet, wenn Funktionen, gespeicherte Prozeduren und Trigger definiert werden, bei denen Sie mehrere Anweisungen definieren müssen. Sie definieren ein anderes Trennzeichen, mit $$
dem das Ende der gesamten Prozedur definiert wird. Darin werden jedoch einzelne Anweisungen jeweils durch beendet ;
. Auf diese Weise kann der mysql
Client beim Ausführen des Codes im Client erkennen, wo die gesamte Prozedur endet, und sie als Einheit ausführen, anstatt die einzelnen Anweisungen im Client auszuführen.
Beachten Sie, dass das DELIMITER
Schlüsselwort nur eine Funktion des Befehlszeilenclients mysql
(und einiger anderer Clients) ist und keine reguläre MySQL- Sprachfunktion . Es wird nicht funktionieren, wenn Sie versuchen, es über eine Programmiersprachen-API an MySQL zu übergeben. Einige andere Clients wie PHPMyAdmin verfügen über andere Methoden, um ein nicht standardmäßiges Trennzeichen anzugeben.
Beispiel:
DELIMITER $$
/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
DROP PROCEDURE my_procedure$$
/* Now start the procedure code */
CREATE PROCEDURE my_procedure ()
BEGIN
/* Inside the procedure, individual statements terminate with ; */
CREATE TABLE tablea (
col1 INT,
col2 INT
);
INSERT INTO tablea
SELECT * FROM table1;
CREATE TABLE tableb (
col1 INT,
col2 INT
);
INSERT INTO tableb
SELECT * FROM table2;
/* whole procedure ends with the custom delimiter */
END$$
/* Finally, reset the delimiter to the default ; */
DELIMITER ;
Wenn Sie versuchen, DELIMITER
mit einem Client zu arbeiten, der ihn nicht unterstützt, wird er an den Server gesendet, der einen Syntaxfehler meldet. Zum Beispiel mit PHP und MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Fehler mit:
Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'DELIMITER $$' in Zeile 1
Die DELIMITER-Anweisung ändert das Standardtrennzeichen, das Semikolon (;) ist, in ein anderes. Das Trennzeichen wird vom Semikolon (;) in doppelte Schrägstriche // geändert.
Warum müssen wir das Trennzeichen ändern?
Weil wir die gespeicherte Prozedur, benutzerdefinierte Funktionen usw. an den Server als Ganzes übergeben möchten, anstatt das MySQL-Tool jede Anweisung gleichzeitig interpretieren zu lassen.
quelle
Wenn Sie eine gespeicherte Routine mit einem
BEGIN...END
Block erstellen , werden Anweisungen innerhalb des Blocks durch ein Semikolon beendet(;)
. DieCREATE PROCEDURE
Aussage braucht aber auch einen Terminator. Es wird also mehrdeutig, ob das Semikolon im Hauptteil der Routine endetCREATE PROCEDURE
oder eine der Anweisungen im Hauptteil der Prozedur beendet.Die Möglichkeit, die Mehrdeutigkeit aufzulösen, besteht darin, eine eindeutige Zeichenfolge zu deklarieren (die nicht im Hauptteil der Prozedur vorkommen darf), die der MySQL-Client als den wahren Terminator für die
CREATE PROCEDURE
Anweisung erkennt .quelle
Das Trennzeichen ist das Zeichen oder die Zeichenfolge, mit der Sie dem MySQL-Client mitteilen, dass Sie die Eingabe einer SQL-Anweisung abgeschlossen haben.
quelle
Sie definieren einen DELIMITER, der den MySQL-Client anweist, die Anweisungen, Funktionen, gespeicherten Prozeduren oder Trigger als vollständige Anweisung zu behandeln. Normalerweise setzen Sie in einer .sql-Datei einen anderen DELIMITER wie $$. Der Befehl DELIMITER wird verwendet, um das Standardtrennzeichen von MySQL-Befehlen (dh;) zu ändern. Da die Anweisungen in den Routinen (Funktionen, gespeicherte Prozeduren oder Trigger) mit einem Semikolon (;) enden, verwenden wir DELIMITER, um sie als zusammengesetzte Anweisung zu behandeln. Wenn dies nicht definiert ist, wenn verschiedene Routinen in derselben Datei oder Befehlszeile verwendet werden, tritt ein Syntaxfehler auf.
Beachten Sie, dass Sie verschiedene nicht reservierte Zeichen verwenden können, um ein eigenes benutzerdefiniertes Trennzeichen zu erstellen. Sie sollten die Verwendung des Backslash-Zeichens (\) vermeiden, da dies das Escape-Zeichen für MySQL ist.
DELIMITER ist nicht wirklich ein MySQL-Sprachbefehl, sondern ein Client-Befehl.
Beispiel
quelle
DELIMITER weist den MySQL-Client an, die Anweisungen, Funktionen, gespeicherten Prozeduren oder Trigger als vollständige Anweisung zu behandeln. Normalerweise in a. SQL-Datei Sie setzen einen anderen DELIMITER wie $$. Der Befehl DELIMITER wird verwendet, um das Standardtrennzeichen von MySQL-Befehlen zu ändern
quelle
Das Trennzeichen ist ein Zeichen in SQL, mit dem die Datenelemente in einer Datenbank getrennt werden. Es identifiziert den Anfang und das Ende der Zeichenfolge. Im Allgemeinen ist das in SQL verwendete Trennzeichen ';'.
quelle