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
A instrução DELIMITER altera o delimitador padrão, que é ponto-e-vírgula (;) para outro. O delimitador é alterado de ponto e vírgula (;) para barras duplas //.
Por que precisamos alterar o delimitador?
Porque queremos passar o procedimento armazenado, funções personalizadas etc. para o servidor como um todo, em vez de permitir que a ferramenta mysql interprete cada instrução de cada vez.
fonte
Quando você cria uma rotina armazenada que possui um
BEGIN...END
bloco, as instruções dentro do bloco são encerradas por ponto e vírgula(;)
. Mas aCREATE PROCEDURE
declaração também precisa de um terminador. Portanto, torna-se ambíguo se o ponto-e-vírgula no corpo da rotina terminaCREATE PROCEDURE
ou termina uma das instruções no corpo do procedimento.A maneira de resolver a ambiguidade é declarar uma string distinta (que não deve ocorrer no corpo do procedimento) que o cliente MySQL reconhece como o verdadeiro terminador da
CREATE PROCEDURE
instrução.fonte
O delimitador é o caractere ou sequência de caracteres que você usará para informar ao cliente MySQL que você terminou de digitar uma instrução Sql.
fonte
Você define um DELIMITER para dizer ao cliente mysql para tratar as instruções, funções, procedimentos armazenados ou gatilhos como uma instrução inteira. Normalmente, em um arquivo .sql, você define um DELIMITER diferente como $$. O comando DELIMITER é usado para alterar o delimitador padrão dos comandos do MySQL (ou seja;). Como as instruções nas rotinas (funções, procedimentos armazenados ou gatilhos) terminam com ponto-e-vírgula (;), para tratá-las como uma declaração composta, usamos DELIMITER. Se não definido ao usar rotinas diferentes no mesmo arquivo ou linha de comando, ocorrerá um erro de sintaxe.
Observe que você pode usar uma variedade de caracteres não reservados para criar seu próprio delimitador personalizado. Você deve evitar o uso do caractere de barra invertida (\), porque esse é o caractere de escape do MySQL.
DELIMITER não é realmente um comando de linguagem MySQL, é um comando de cliente.
Exemplo
fonte
DELIMITER para dizer ao cliente mysql para tratar as instruções, funções, procedimentos armazenados ou gatilhos como uma instrução inteira. Normalmente em um. arquivo sql, você define um DELIMITER diferente como $$. O comando DELIMITER é usado para alterar o delimitador padrão dos comandos do MySQL
fonte
O delimitador é um caractere no SQL usado para separar os itens de dados em um banco de dados. Ele identifica o início e o fim da cadeia de caracteres. Geralmente, o delimitador usado no SQL é ';'.
fonte