INSERT INTO … ON DUPLICATE ОБНОВИТЬ все значения

Могу я безопасно Обновить все значения как это:

INSERT INTO tbl_name SET `a`=:a, `b`=:b, ... `z`=:z
ON DUPLICATE KEY UPDATE
`a`=VALUES(`a`), `b`=VALUES(`b`), ... `z`=VALUES(`z`);

Я попробовал это, и это работает. Но это проверено только на одном столе innodb.

Я нашел эти связанные вопросы 1, 2, 3 но нет упоминания о том, что обновление ВСЕХ столбцов (уникальных и / или ПК) на 100% безопасно.

Это не создает ошибки при обновлении PK с тем же значением.
Это не создает ошибки при обновлении уникального col с тем же значением.

Так это 100% безопасно для использования? Если нет, то каковы угловые случаи, когда он ломается?

——— редактировать ————-
добавлено … до z col

1

Решение

INSERT INTO … ON DUPLICATE KEY UPDATE работает так:

  • он пытается вставить строку как обычно
  • если происходит какое-либо нарушение ограничения в каком-либо столбце, выполняется UPDATE заявление вместо существующей строки, с которой INSERT заявление противоречило

Это просто означает, что если UPDATE одно заявление будет успешным, его ON DUPLICATE KEY UPDATE эквивалент также будет работать. Это означает, что вы, очевидно, не можете нарушать какие-либо ограничения в UPDATE либо утверждение, или все это не удастся (например, попытка установить значение на UNIQUE столбец, который уже существует в другой строке).

Если вы снова установите одно и то же значение в том же столбце, это по сути не будет. Значение в столбце не изменяется и, следовательно, также не может вызвать каких-либо ошибок (предположим, что у вас нет ничего особенного BEFORE UPDATE триггеры, которые могут плохо себя вести). Количество столбцов здесь не имеет значения, вы можете изменить столько, сколько вам нужно, в одном выражении.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]