Andere scheidingstekens dan de standaard ;
worden meestal gebruikt bij het definiëren van functies, opgeslagen procedures en triggers waarin u meerdere instructies moet definiëren. U definieert een ander scheidingsteken zoals $$
die wordt gebruikt om het einde van de hele procedure te definiëren, maar daarbinnen worden individuele instructies elk beëindigd door ;
. Op die manier, wanneer de code wordt uitgevoerd in de mysql
client, de client kan zien waar de hele procedure eindigt en deze als een eenheid uitvoeren in plaats van de afzonderlijke instructies binnenin uit te voeren.
Merk op dat de DELIMITER
trefwoord is een functie van de opdrachtregel mysql
client (en enkele andere clients) alleen en niet een reguliere MySQL-taalfunctie. Het zal niet werken als u probeert het via een programmeertaal-API door te geven aan MySQL. Sommige andere clients, zoals PHPMyAdmin, hebben andere methoden om een niet-standaard scheidingsteken op te geven.
Voorbeeld:
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 ;
Poging om DELIMITER
te gebruiken met een client die dit niet ondersteunt, wordt het naar de server gestuurd, die een syntaxisfout rapporteert. Bijvoorbeeld met PHP en MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Fouten met:
U heeft een fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis om te gebruiken in de buurt van 'DELIMITER $$' op regel 1