Розмежувачі, відмінні від за замовчуванням ;
, зазвичай використовуються при визначенні функцій, збережених процедур та тригерів, де потрібно визначити кілька операторів. Ви визначаєте інший роздільник, $$
який використовується для визначення кінця всієї процедури, але всередині нього окремі заяви закінчуються ;
. Таким чином, коли код запускається у 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