Mysql
 sql >> Base de données >  >> RDS >> Mysql

Délimiteurs dans MySQL

Délimiteurs autres que le ; par défaut sont généralement utilisés lors de la définition de fonctions, de procédures stockées et de déclencheurs dans lesquels vous devez définir plusieurs instructions. Vous définissez un délimiteur différent comme $$ qui est utilisé pour définir la fin de toute la procédure, mais à l'intérieur de celle-ci, les instructions individuelles sont chacune terminées par ; . De cette façon, lorsque le code est exécuté dans le mysql client, le client peut dire où se termine la procédure entière et l'exécuter comme une unité plutôt que d'exécuter les instructions individuelles à l'intérieur.

Notez que le DELIMITER le mot clé est une fonction de la ligne de commande mysql client (et quelques autres clients) uniquement et non une fonctionnalité de langage MySQL standard. Cela ne fonctionnera pas si vous essayez de le transmettre via une API de langage de programmation à MySQL. Certains autres clients comme PHPMyAdmin ont d'autres méthodes pour spécifier un délimiteur autre que celui par défaut.

Exemple :

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 ;

Tentative d'utilisation de DELIMITER avec un client qui ne le supporte pas, il sera envoyé au serveur, qui signalera une erreur de syntaxe. Par exemple, en utilisant PHP et MySQLi :

$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;

Erreurs avec :

Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'DELIMITER $$' à la ligne 1