Запрос разделителя и триггера

Могу ли я узнать, что делает следующий триггер MySQL?

DELIMITER ??
CREATE TRIGGER before_results_update
BEFORE UPDATE ON Student_Results
FOR EACH ROW BEGIN
INSERT INTO Result_Changes
SET ACTION = 'update',
ResultID = OLD.ID,
Result = OLD.Result,
User = USER(),
ChangedOn = NOW();
END ??
DELIMITER ;

1 ответ

Решение

DELIMITER создает разграничение всего блока. Оно использует ?? как строка, если вы хотите для всей оболочки в начале и в конце. В конце, ; устанавливается как РАЗДЕЛИТЕЛЬ, который мы все привыкли печатать для конца оператора. Разделители не используются в SQLFiddle или PHPMyAdmin, но находятся в MySQL Workbench и других. Так что это вещь на стороне клиента. Зависит от того, что вы используете.

Перед фактическим обновлением таблицы Student_Results он выполняет INSERT (используя не очень используемый стиль вставки stmt) для таблицы Result_Changes указав 5 имен столбцов.

ОБНОВЛЕНИЕ технически еще не произошло в Student_Results, Но триггер имеет доступ к строкам, которые будут обновлены, и на них ссылается специальное "имя строки", называемое OLD,

FOR EACH ROW может зацикливаться от 1 до N раз.

Другие вопросы по тегам