Delimitadores diferentes do padrão ;
geralmente são usados ao definir funções, procedimentos armazenados e acionadores, nos quais você deve definir várias instruções. Você define um delimitador diferente como o $$
que é usado para definir o final de todo o procedimento, mas dentro dele, cada instrução individual é terminada por ;
. Dessa forma, quando o código é executado no mysql
cliente, o cliente pode dizer onde o procedimento inteiro termina e executá-lo como uma unidade, em vez de executar as instruções individuais.
Observe que a DELIMITER
palavra-chave é uma função apenas do mysql
cliente de linha de comando (e de alguns outros clientes) e não um recurso regular da linguagem MySQL. Não funcionará se você tentar passar por uma API da linguagem de programação para o MySQL. Alguns outros clientes, como o 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 ;
Tentar usar DELIMITER
com um cliente que não o suporta fará com que ele seja enviado ao servidor, o 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 na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para obter a sintaxe correta perto de 'DELIMITER $$' na linha 1