Разделители, отличные от значений по умолчанию ;
, обычно используются при определении функций, хранимых процедур и триггеров, в которых необходимо определить несколько операторов. Вы определяете другой разделитель, например, $$
который используется для определения конца всей процедуры, но внутри него отдельные операторы заканчиваются на ;
. Таким образом, когда код запускается на 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
Оператор DELIMITER меняет стандартный разделитель, который является точкой с запятой (;), на другой. Разделитель меняется с точки с запятой (;) на двойную косую черту //.
Почему мы должны изменить разделитель?
Потому что мы хотим передать хранимую процедуру, пользовательские функции и т. Д. На сервер в целом, а не позволять инструменту mysql интерпретировать каждый оператор за раз.
источник
Когда вы создаете хранимую подпрограмму с
BEGIN...END
блоком, операторы внутри блока заканчиваются точкой с запятой(;)
. НоCREATE PROCEDURE
утверждение также нуждается в терминаторе. Таким образом, становится неясным, заканчивается ли точка с запятой в теле процедурыCREATE PROCEDURE
или завершает одно из утверждений в теле процедуры.Способ устранения неоднозначности состоит в объявлении отдельной строки (которая не должна встречаться в теле процедуры), которую клиент MySQL распознает как истинный терминатор для
CREATE PROCEDURE
оператора.источник
Разделитель - это символ или строка символов, которые вы будете использовать, чтобы сообщить клиенту MySQL, что вы закончили вводить оператор Sql.
источник
Вы определяете DELIMITER, чтобы сказать клиенту mysql обрабатывать операторы, функции, хранимые процедуры или триггеры как весь оператор. Обычно в файле .sql вы устанавливаете другой разделитель, например $$. Команда DELIMITER используется для изменения стандартного разделителя команд MySQL (т.е.;). Так как операторы внутри подпрограмм (функций, хранимых процедур или триггеров) заканчиваются точкой с запятой (;), для обработки их как составного оператора мы используем DELIMITER. Если не определено при использовании различных подпрограмм в одном файле или командной строке, это приведет к синтаксической ошибке.
Обратите внимание, что вы можете использовать различные незарезервированные символы, чтобы создать свой собственный разделитель. Вам следует избегать использования символа обратной косой черты (\), потому что это escape-символ для MySQL.
DELIMITER на самом деле не команда языка MySQL, это команда клиента.
пример
источник
DELIMITER для указания клиенту mysql обрабатывать операторы, функции, хранимые процедуры или триггеры как целостный оператор. Обычно в. Файл sql вы устанавливаете другой разделитель, как $$. Команда DELIMITER используется для изменения стандартного разделителя команд MySQL.
источник
Разделитель - это символ в SQL, который используется для разделения элементов данных в базе данных. Он идентифицирует начало и конец строки символов. Обычно в SQL используется разделитель ';'.
источник