DELIMITER //
Какая польза от этого?
DELIMITER //
Какая польза от этого?
Он изменяет разделитель операторов от ;
до //
. Это значит, что вы можете написать ;
в определении триггера без неверного истолкования клиента MySQL, что означает, что вы сделали с ним.
Обратите внимание, что при изменении назад DELIMITER ;
, а не DELIMITER;
, как я видел, люди пытаются это сделать.
В SQL вы закрываете каждый оператор разделителем, который по умолчанию является точкой с запятой (;). В триггере вам нужно написать несколько операторов, каждый из которых заканчивается точкой с запятой. Чтобы сообщить MySQL, что эти точки с запятой не являются концом вашего оператора триггера, вы временно меняете разделитель; на //, поэтому MySQL будет знать, что оператор триггера заканчивается только тогда, когда он запускает/////
Прочитайте (ummmm) документацию mysql.
delimiter
- это маркер конца каждой команды, которую вы отправляете клиенту командной строки mysql.
delimiter
связан не только с триггерами, но определение триггеров и хранимых процедур является одним из сильных вариантов использования, поскольку вы хотите, чтобы они содержали точки с запятой (;), которые в противном случае являются стандартными delimiter
.
Простой устанавливает конец разделителя инструкций (;
полуколония в стандартном SQL по умолчанию).
Изменение символа может быть полезно, если вы хотите использовать ;
в своем SQL или используете встроенный SQL (где это может привести к путанице). аналогично //
в вашем примере может привести к путанице во встроенном SQL, или вы можете использовать его в своем SQL. Поэтому используйте DELIMITER
для установки разделителя, подходящего для вашего приложения и потребностей.
Добавьте пример:
При работе с командой оболочки 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 ;