Здравствуйте. При обучении MySQL по курсу [Специалист] MySQL-5.1 2013 Столкнулся с заданием создать триггер на INSERT с условием. При вставке города с несуществующим countrycode, менять новый код на RUS. Триггеру меня создаётся, но при вставке города происходит ошибка ERROR 1442 (HY000): Can't update table 'city' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Не удается обновить таблицу "город" в хранимой функции / триггера, поскольку он уже используется оператором, который вызвал эту сохраненную функцию / триггер. База используется world демонстрационная MySQL. Ниже код запроса на создание триггера. Подскажите пожалуйста если я что-то неправильно понял. За ранее спасибо!
DELIMITER |
-- 3. При вставке города с несуществующим countrycode, менять новый код на RUS
DROP TRIGGER IF EXISTS tg_city_insert |
CREATE TRIGGER tg_city_insert AFTER INSERT ON city
FOR EACH ROW BEGIN
IF NEW.countrycode = '' THEN
-- Изменим код на RUS
UPDATE city
SET
countrycode = 'RUS'
WHERE NEW.countrycode = '';
END IF;
END;
|
DELIMITER ;
1. новый ученик - 19 Июня, 2018 - 19:27:10 - перейти к сообщению
2. Мелкий - 19 Июня, 2018 - 20:28:31 - перейти к сообщению
В mysql вы не можете из триггера менять ту таблицу, на которой повешен этот триггер.
Значение обновляемой строки вы можете менять изменяя сам NEW перед вставкой.
Значение обновляемой строки вы можете менять изменяя сам NEW перед вставкой.
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- CREATE TRIGGER tg_city_insert BEFORE INSERT ON city
- FOR EACH ROW BEGIN
- IF NEW.countrycode = '' THEN
- -- Изменим код на RUS
- SET new.countrycode = 'RUS';
- END IF;
- END;