Что делает DELIMITER // в триггере? - PullRequest
30 голосов
/ 28 августа 2009
DELIMITER //

Какая польза от этого?

Ответы [ 5 ]

63 голосов
/ 28 августа 2009

Изменяет разделитель операторов с ; на //. Это означает, что вы можете написать ; в своем определении триггера без того, чтобы клиент MySQL неверно истолковал это как значение, которое вы сделали с ним.

Обратите внимание, что при переходе назад это DELIMITER ;, а не DELIMITER;, как я видел, люди пытаются это сделать.

22 голосов
/ 28 августа 2009

В SQL вы закрываете каждую инструкцию с разделителем, который по умолчанию является точкой с запятой (;). В триггере нужно написать несколько операторов, каждая из которых заканчивается точкой с запятой. Чтобы сообщить MySQL, что эти точки с запятой не являются концом вашего оператора триггера, вы временно изменяете разделитель с; в //, поэтому MySQL будет знать, что оператор триггера заканчивается только тогда, когда он экононтирует //.*1001

2 голосов
/ 25 июня 2017

Добавить пример:
При работе с командой оболочки mysql мы использовали разделитель ; для закрытия каждого оператора. Однако в случае, если мы хотим построить процедуры и триггеры хранилища, нам необходимо добавить точку с запятой ; в эти операторы.

delimiter //
create trigger log_students after insert on students
for each row
  begin
    insert into log_students(change_by, change_at) values(USER(), NOW());
  end//
delimiter ;
1 голос
/ 06 января 2011

Простой устанавливает конец разделителя оператора (; точка с запятой в стандарте, SQL по умолчанию). Изменение символа может быть полезно, если вы хотите использовать ; в своем SQL или если вы используете встроенный SQL (где это может привести к путанице). Точно так же // в вашем примере может привести к путанице во встроенном SQL, или вы можете захотеть использовать его в своем SQL. Поэтому используйте DELIMITER для установки разделителя, который подходит для вашего приложения и потребностей.

0 голосов
/ 28 августа 2009

Прочитайте (мммм) MySQL документацию .

delimiter - маркер конца каждой команды, отправляемой клиенту командной строки mysql.

delimiter относится не только к триггерам, но определение триггеров и хранимых процедур является одним из сильных вариантов использования, так как вы хотите, чтобы они содержали точки с запятой (;), которые в противном случае являются значениями по умолчанию delimiter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...