Mysql
 sql >> Database >  >> RDS >> Mysql

Delimitatori in MySQL

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