Delimitatori diversi da quello predefinito ;
vengono in genere utilizzati durante la definizione di funzioni, stored procedure e trigger in cui è necessario definire più istruzioni. Definisci un delimitatore diverso come $$
che viene utilizzato per definire la fine dell'intera procedura, ma al suo interno, le singole istruzioni sono terminate ciascuna da ;
. In questo modo, quando il codice viene eseguito in mysql
client, il cliente può dire dove finisce l'intera procedura ed eseguirla come un'unità piuttosto che eseguire le singole istruzioni all'interno.
Nota che il DELIMITER
la parola chiave è una funzione della riga di comando mysql
client (e alcuni altri client) e non una normale funzionalità del linguaggio MySQL. Non funzionerà se provi a passarlo attraverso un'API del linguaggio di programmazione a MySQL. Alcuni altri client come PHPMyAdmin hanno altri metodi per specificare un delimitatore non predefinito.
Esempio:
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 ;
Tentativo di utilizzare DELIMITER
con un client che non lo supporta ne causerà l'invio al server, che segnalerà un errore di sintassi. Ad esempio, utilizzando PHP e MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Errori con:
Hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a "DELIMITER $$" alla riga 1