Andra avgränsare än standard ;
används vanligtvis när du definierar funktioner, lagrade procedurer och utlösare där du måste definiera flera satser. Du definierar en annan avgränsare som $$
som används för att definiera slutet av hela proceduren, men inuti den avslutas individuella satser var och en av ;
. På så sätt, när koden körs i mysql
klient kan klienten se var hela proceduren slutar och köra den som en enhet istället för att köra de individuella satserna inuti.
Observera att DELIMITER
nyckelordet är en funktion av kommandoraden mysql
endast klient (och vissa andra klienter) och inte en vanlig MySQL-språkfunktion. Det kommer inte att fungera om du försökte skicka det via ett programmeringsspråk API till MySQL. Vissa andra klienter som PHPMyAdmin har andra metoder för att ange en icke-standardavgränsare.
Exempel:
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 ;
Försöker använda DELIMITER
med en klient som inte stöder det kommer den att skickas till servern, vilket kommer att rapportera ett syntaxfel. Till exempel med PHP och MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Fel med:
Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda nära 'DELIMITER $$' på rad 1