Andre skilletegn end standard ;
bruges typisk til at definere funktioner, lagrede procedurer og triggere, hvor du skal definere flere sætninger. Du definerer en anden skilletegn som $$
som bruges til at definere slutningen af hele proceduren, men inde i den afsluttes individuelle udsagn hver af ;
. På den måde, når koden køres i mysql
klient, kan klienten fortælle, hvor hele proceduren slutter og udføre den som en enhed i stedet for at udføre de individuelle sætninger inde.
Bemærk, at DELIMITER
nøgleordet er en funktion af kommandolinjen mysql
kun klient (og nogle andre klienter) og ikke en almindelig MySQL-sprogfunktion. Det vil ikke fungere, hvis du forsøgte at sende det gennem et programmeringssprog API til MySQL. Nogle andre klienter som f.eks. PHPMyAdmin har andre metoder til at angive en ikke-standardadskiller.
Eksempel:
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 ;
Forsøger at bruge DELIMITER
med en klient, der ikke understøtter det, vil det medføre, at det sendes til serveren, som vil rapportere en syntaksfejl. For eksempel ved hjælp af PHP og MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Fejl med:
Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MySQL-serverversion for den rigtige syntaks, der skal bruges nær 'DELIMITER $$' på linje 1