Разделители, отличные от значений по умолчанию ;
, обычно используются при определении функций, хранимых процедур и триггеров, в которых необходимо определить несколько операторов. Вы определяете другой разделитель, например, $$
который используется для определения конца всей процедуры, но внутри него отдельные операторы заканчиваются на ;
. Таким образом, когда код запускается на mysql
клиенте, клиент может сказать, где заканчивается вся процедура, и выполнить ее как единое целое, а не выполнять отдельные операторы внутри.
Обратите внимание, что DELIMITER
ключевое слово является функцией только mysql
клиента командной строки (и некоторых других клиентов), а не обычной функцией языка MySQL. Это не сработает, если вы попытаетесь передать его через API языка программирования в MySQL. Некоторые другие клиенты, такие как PHPMyAdmin, имеют другие методы для указания разделителя не по умолчанию.
Пример:
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 ;
Попытка использования DELIMITER
с клиентом, который его не поддерживает, приведет к его отправке на сервер, который сообщит об синтаксической ошибке. Например, используя PHP и MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Ошибки с:
У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать рядом с 'DELIMITER $$' в строке 1