Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Как создать такой TRIGGER НА UPDATE (MySQL)

Есть некая таблица MYTEST (ID, Name, Address) и такой запрос к ней:

12
 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, что я не могу обновить таблицу из тригера, который создан на эту же таблицу

12345678910111213141516
 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 ; 

Как сделать такой триггер?

По дате
По рейтингу
Аватар пользователя
Новичок

Это делается БЕЗ триггеров и БЕЗ дублирования значений:

12
 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