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