Запрос разделителя и триггера
Могу ли я узнать, что делает следующий триггер 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 раз.