Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Delimitadores no MySQL


Delimitadores diferentes do padrão ; são normalmente usados ​​ao definir funções, procedimentos armazenados e gatilhos nos quais você deve definir várias instruções. Você define um delimitador diferente como $$ que é usado para definir o final de todo o procedimento, mas dentro dele, as instruções individuais são terminadas por ; . Dessa forma, quando o código é executado no mysql cliente, o cliente pode dizer onde todo o procedimento termina e executá-lo como uma unidade em vez de executar as instruções individuais dentro dele.

Observe que o DELIMITER palavra-chave é uma função da linha de comando mysql cliente (e alguns outros clientes) apenas e não um recurso de linguagem MySQL regular. Não funcionará se você tentar passá-lo por meio de uma API de linguagem de programação para o MySQL. Alguns outros clientes como PHPMyAdmin têm outros métodos para especificar um delimitador não padrão.

Exemplo:

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 ;

Tentando usar DELIMITER com um cliente que não o suporta fará com que seja enviado ao servidor, que reportará um erro de sintaxe. Por exemplo, usando PHP e MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;

Erros com:

Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta a ser usada perto de 'DELIMITER $$' na linha 1