


Как создать такой TRIGGER НА UPDATE (MySQL)
Есть некая таблица MYTEST (ID, Name, Address) и такой запрос к ней:
INSERT INTO MYTEST VALUES (1, "ABC", "DEF") ON duplicate key update ID = ID;
SELECT * FROM MYTEST LIMIT 5;
Поскольку уже ключ со значением 1 имеется, то вывелись просто данные:
1, ab, cd
Я хочу создать триггер, который бы при таком запросе, старые значения (1, ab, cd) заменял на новые (1, ABC, DEF). Понятно, что можно прописать ON DUPLICATE KEY UPDATE ID = 1, Name = ABC, Address = DEF.
Но если будет 100 колонок, я что вручную буду писать значение для каждой колонки, если ключ совпадёт?
Я вот написал триггер, но вылезает ошибка 1442, что я не могу обновить таблицу из тригера, который создан на эту же таблицу
DELIMITER //
CREATE TRIGGER NET
AFTER UPDATE ON MYTEST
FOR EACH ROW
BEGIN
DECLARE P1 VARCHAR(15);
DECLARE P2 VARCHAR(15);
SELECT Name, Address INTO P1, P2 FROM MYTEST WHERE NEW.ID = ID;
IF (NEW.Name = P1) THEN
UPDATE MYTEST SET Name = NEW.Name WHERE NEW.ID = ID;
END IF;
IF (NEW.Address = P2) THEN
UPDATE MYTEST SET Address = NEW.Address WHERE NEW.ID = ID;
END IF;
END //
DELIMITER ;
Как сделать такой триггер?
Это делается БЕЗ триггеров и БЕЗ дублирования значений:
INSERT INTO MYTEST (ID, Name, Address) VALUES (1, "ABC", "DEF")
ON DUPLICATE KEY UPDATE Name = VALUES(Name), Address = VALUES(Address)
В данном случае VALUES(Name) подставит значение "ABC", а VALUES(Address) - "DEF".
Подробности: https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html