Я пытаюсь создать очень простой триггер MySQL, который будет запускаться при вставке или обновлении строки в одной таблице (винты). Я думал, что он достаточно близок, однако, когда я запускаю запрос для создания триггера, он просто терпит неудачу и выдает ошибку, ничего не указав мне в правильном направлении.
Вот то, что у меня есть, я просто хочу взять значение двух столбцов в таблице и умножить их, а затем обновить результат в третий столбец, я хочу, чтобы это происходило всякий раз, когда новая запись добавляется или редактируется в этом Таблица. Я попытался сопоставить некоторые примеры, которые я видел, насколько я могу, но, похоже, ничего не совсем подходит.
delimiter //
CREATE TRIGGER estimate
AFTER INSERT ON `Screws` FOR EACH ROW
begin
UPDATE Screws SET Quantity = Weight * num_per_ounce;
end;
delimiter ;
Если вы хотите изменить ту же таблицу, в которую вставляете строку, не используйте после вставить триггер. Вместо этого используйте до вставить триггер:
delimiter //
CREATE TRIGGER screws_insert
BEFORE INSERT ON `Screws` FOR EACH ROW
begin
SET new.Quantity = new.Weight * new.num_per_ounce;
end;
delimiter ;
По сути, вы пытаетесь добавить вычисляемый столбец, который MySQL не поддерживает напрямую.
Если вы хотите триггер для update
тогда вам понадобятся два триггера:
delimiter //
CREATE TRIGGER screws_update
BEFORE UPDATE ON `Screws` FOR EACH ROW
begin
SET new.Quantity = new.Weight * new.num_per_ounce;
end;
delimiter ;
Обратите внимание, что я изменил имена триггеров, чтобы включить таблицу. Обычно это хорошая практика для отслеживания триггеров.
Хорошо, я опубликую свое возможное решение для всех, у кого есть подобная проблема.
Оказывается, я забыл изменить действие «Триггер» в другом триггере, поэтому у меня сейчас есть оба. Вот мой окончательный код, я добавил проверку, чтобы он не запускался, если в двух проверяемых им полях нет ввода данных.
CREATE TRIGGER screws_insert
BEFORE INSERT ON `Screws` FOR EACH ROW
begin
IF new.Weight AND new.num_per_ounce IS NOT NULL THEN
SET new.Quantity = new.Weight * new.num_per_ounce;
END IF;
end;
CREATE TRIGGER screws_update
BEFORE UPDATE ON `Screws` FOR EACH ROW
begin
IF new.Weight AND new.num_per_ounce IS NOT NULL THEN
SET new.Quantity = new.Weight * new.num_per_ounce;
END IF;
end;
Обязательно установите разделитель // перед запуском SQL.
Спасибо обоим пользователям, которые внесли свой вклад в это решение!