sql >> Base de Datos >  >> RDS >> Mysql

Delimitadores en MySQL

Delimitadores distintos al predeterminado ; se utilizan normalmente al definir funciones, procedimientos almacenados y activadores en los que debe definir varias declaraciones. Defina un delimitador diferente como $$ que se usa para definir el final de todo el procedimiento, pero dentro de él, las declaraciones individuales terminan con ; . De esa manera, cuando el código se ejecuta en mysql cliente, el cliente puede saber dónde finaliza todo el procedimiento y ejecutarlo como una unidad en lugar de ejecutar las instrucciones individuales dentro.

Tenga en cuenta que el DELIMITER palabra clave es una función de la línea de comando mysql cliente (y algunos otros clientes) solamente y no una característica regular del lenguaje MySQL. No funcionará si intenta pasarlo a través de una API de lenguaje de programación a MySQL. Algunos otros clientes como PHPMyAdmin tienen otros métodos para especificar un delimitador no predeterminado.

Ejemplo:

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 ;

Intentando usar DELIMITER con un cliente que no lo admita, hará que se envíe al servidor, lo que informará un error de sintaxis. Por ejemplo, usando PHP y MySQLi:

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

Errores con:

Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'DELIMITER $$' en la línea 1