Вообще говоря, есть три способа справиться с этой ситуацией с помощью одного запроса (обычно лучше использовать меньшее количество запросов), но ни один из них не является универсальным «наилучшим способом». То, что вы должны использовать, зависит от ваших потребностей.
Во-первых, как вы упоминаете, INSERT …
запускается вслепую и обрабатывает любые ошибки PHP. Это лучший подход, когда дубликат ключа указывает на процедурную проблему (ошибка в программном обеспечении, пользователь, пытающийся зарегистрировать имя, которое уже использовалось, и т. Д.), Поскольку он позволяет выполнять дополнительные операции перед фиксацией обновления базы данных .
Во-вторых, есть синтаксис INSERT IGNORE …
. Я бы назвал этот метод наименее полезным, так как он полностью отбрасывает ваш INSERT
, если ключ уже существует. В первую очередь полезно, когда строка (или строки) может быть добавлена или не добавлена в таблицу ранее, но известно, что данные не изменились.
Наконец, вы можете использовать оператор INSERT … ON DUPLICATE KEY UPDATE …
. Они могут быть довольно многословными, но очень удобными, поскольку позволяют вставлять данные в таблицу, не беспокоясь о том, существуют ли более старые данные. Если это так, существующая строка обновляется. Если нет, вставляется новый. В любом случае, ваша таблица будет содержать самые последние данные.