Ответ 1
INSERT INTO … ON DUPLICATE KEY UPDATE
работает следующим образом:
- он пытается вставить строку как обычно
- если происходит какое-либо нарушение ограничений в любом столбце, он выполняет оператор
UPDATE
вместо этого в существующей строке, с которой столкнулся операторINSERT
Это просто означает, что если только оператор UPDATE
будет успешным, его эквивалент ON DUPLICATE KEY UPDATE
также будет работать. Это означает, что вы, очевидно, не можете нарушать какие-либо ограничения в инструкции UPDATE
, либо все это не удастся (например, попытка установить значение в столбце UNIQUE
, который уже существует в другой строке).
Если вы снова установите одно и то же значение в том же столбце, это практически не работает. Значение в столбце не изменяется и, следовательно, также не может вызывать каких-либо ошибок (предположим, что у вас нет действительно напуганных триггеров BEFORE UPDATE
, которые могут плохо себя вести). Здесь количество столбцов не имеет значения, вы можете изменить как можно больше или меньше в одном из них.