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