Resumo : neste tutorial, você aprenderá como alterar o delimitador padrão do MySQL usando o DELIMITER
comando.
Quando você deseja executar várias instruções SQL , use ponto e vírgula ( ;
) para separar duas instruções, conforme mostrado no exemplo a seguir:
SELECT * FROM products;
SELECT * FROM customers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Um programa cliente MySQL, como MySQL Workbench ou o programa mysql, usa o delimitador padrão ( ;
) para separar instruções e executar cada uma separadamente.
No entanto, um procedimento armazenado consiste em várias instruções separadas por ponto e vírgula ( ;
).
Se você usar um programa cliente MySQL para definir um procedimento armazenado que contém ponto e vírgula, o programa cliente MySQL não tratará todo o procedimento armazenado como uma única instrução; em vez disso, ele irá reconhecê-lo como múltiplas instruções.
Portanto, é necessário redefinir temporariamente o delimitador para que você possa passar todo o procedimento armazenado para o servidor como uma única instrução.
Para redefinir o delimitador padrão, use o DELIMITER
comando a seguir:
DELIMITER delimiter_character
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O delimiter_character
pode consistir em um único caractere ou em vários caracteres, como //
ou $$
. No entanto, você deve evitar usar a barra invertida ( \
) porque é o caractere de escape no MySQL.
O MySQL usa barra invertida (\) como caractere de escape, o que permite incluir caracteres especiais em strings sem desencadear erros de sintaxe. Por exemplo, você pode usar o caractere de escape para incluir aspas simples em uma string como esta:SELECT 'It\'s a sunny day';
O exemplo a seguir ilustra como alterar o delimitador atual para //
:
DELIMITER //
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Depois de alterar o delimitador, você poderá usar o novo delimitador para finalizar uma instrução, da seguinte maneira:
DELIMITER //
SELECT * FROM customers //
SELECT * FROM products //
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para reverter para o delimitador padrão, que é um ponto e vírgula ( ;
), use a seguinte instrução:
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Utilizando MySQL DELIMITER para procedimentos armazenados
Normalmente, um procedimento armazenado contém várias instruções separadas por ponto e vírgula (;).
Para compilar todo o procedimento armazenado como uma única instrução composta, você deve alterar temporariamente o delimitador de ponto e vírgula ( ;
) para outro delimitador, como $$
ou //
:
DELIMITER $$
CREATE PROCEDURE CreatePersonTable()
BEGIN
-- drop persons table
DROP TABLE IF EXISTS persons;
-- create persons table
CREATE TABLE persons(
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL
);
-- insert data into the persons table
INSERT INTO persons(first_name, last_name)
VALUES('John','Doe'),
('Jane','Doe');
-- retrieve data from the persons table
SELECT id, first_name, last_name
FROM persons;
END $$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que você aprenderá a sintaxe de criação de um procedimento armazenado no próximo tutorial.
Neste código:
- Primeiro, altere o delimitador padrão para
$$
. - Segundo, use o ponto e vírgula (
;
) no corpo do procedimento armazenado e$$
após aEND
palavra-chave para encerrar o procedimento armazenado. - Terceiro, reverta para o delimitador padrão (
;
).
Resumo
- Utilize o
DELIMITER
comando para alterar o delimitador padrão (;
) para outro de sua preferência.