Andere Trennzeichen als der Standard ;
werden normalerweise beim Definieren von Funktionen, gespeicherten Prozeduren und Triggern verwendet, bei denen Sie mehrere Anweisungen definieren müssen. Sie definieren ein anderes Trennzeichen wie $$
die verwendet wird, um das Ende der gesamten Prozedur zu definieren, aber darin werden einzelne Anweisungen jeweils durch ;
abgeschlossen . Auf diese Weise wird der Code in mysql
ausgeführt Client kann der Client erkennen, wo die gesamte Prozedur endet, und sie als Einheit ausführen, anstatt die einzelnen Anweisungen darin auszuführen.
Beachten Sie, dass das DELIMITER
Schlüsselwort ist eine Funktion der Befehlszeile mysql
nur Client (und einige andere Clients) und kein reguläres MySQL-Sprachfeature. Es funktioniert nicht, wenn Sie versucht haben, es über eine Programmiersprachen-API an MySQL zu übergeben. Einige andere Clients wie PHPMyAdmin haben 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 ;
Versuch, DELIMITER
zu verwenden bei einem Client, der sie nicht unterstützt, wird sie 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, um sie in der Nähe von 'DELIMITER $$' in Zeile 1 zu verwenden