Intereting Posts
Проверка электронной почты в системе yii Как получить данные предыдущей даты в php mysql Ошибка при компиляции product.tpl с помощью smarty Как точно работают границы слова регулярного выражения в PHP? Проверка доступной комнаты с использованием MySql Каков наилучший способ перевода системы перевода на веб-сайт php? Как сделать даты синтаксиса strtotime в формате австралийского (т.е. Великобритании): dd / mm / yyyy? сортировать числовой массив строк в php Имя индекса динамического массива PHP создание цепного метода в ларавеле PHP: пример формы, который будет шифровать строку запроса (GET) (скрытие данных, а не безопасность) Каков наилучший способ хранения данных между действиями в zend framework 2? Плагин PHPExcel не импортирует файл в cakephp CSS не загружается на одном из моих маршрутов / представлений laravel install on bluehost – ошибка 500, несмотря на несколько методов установки

INSERT INTO … ON DUPLICATE UPDATE все значения

Могу ли я безопасно обновлять все значения, например:

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, но нет никакого упоминания, что обновление всех столбцов (уникальных и / или pk) на 100% безопасно.

Он не создает никаких ошибок при обновлении ПК с одинаковым значением.
Он не создает никаких ошибок при обновлении Unique col с одинаковым значением.

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

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

INSERT INTO … ON DUPLICATE KEY UPDATE работает следующим образом:

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

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

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