Здравствуйте, и спасибо за просмотр, у меня есть таблица (с именами, измененными с настоящих имен, и некоторая другая информация не указана, пожалуйста, дайте мне знать, есть ли какая-либо дополнительная информация о таблице, которую вы хотите)
CREATE TABLE IF NOT EXISTS `example`.`coursetwo` (
`candidate_no` INT(11) NOT NULL,
`course_date` DATETIME NULL,
`course_name` VARCHAR(45) NULL,
PRIMARY KEY (`candidate_no`),
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
И у меня есть запрос на обновление формы, которая обновляет дату и имя курса таблицы для кандидата.Вот запрос:
UPDATE coursetwo SET course_date=?, course_name=? WHERE candidate_no = ?;
Когда пользователь хочет вернуться назад и ввести только одно значение, например, имя_курса и отправить его, он устанавливает нулевую дату курса и не сохраняет предыдущий известный ввод.
Я создаю триггер, если значение равно нулю, затем использую старое значение, однако получаю вложенную ошибку исключения:
Произошла непредвиденная ошибка (тип = Внутренний серверОшибка, статус = 500).PreparedStatementCallback;без категории SQLException для SQL [ОБНОВЛЕНИЕ coursetwo SET course_date = ?, course_name =?ГДЕ кандидат_ = =];Состояние SQL [HY000];код ошибки [1442];Невозможно обновить таблицу 'coursetwo' в сохраненной функции / триггере, потому что она уже используется оператором, который вызвал эту сохраненную функцию / триггер;nested ...
Вот мой триггер:
delimiter #
DROP TRIGGER IF EXISTS ifnull_keep_old_values#
create trigger ifnull_keep_old_values after update on coursetwo
for each row
begin
IF NEW.course_date IS NULL THEN
UPDATE example
SET course_date = OLD.course_date WHERE candidate_no = OLD.candidate_no;
END IF;
END#
DELIMITER ;
Кто-нибудь знает, что с этим не так, и есть ли другая работа вокруг?У меня есть много таблиц и столбцов, которые нужно изменить, и мне придется делать этот триггер примерно 50 раз для каждой (очень плохо!).Я не очень разбираюсь в триггерах, поэтому любая помощь будет отличной!
Спасибо, что нашли время, чтобы прочитать и помочь мне:)