другой способ сделать это - использовать оператор INSERT IGNORE
.Предполагая, что column1
должен содержать только уникальные значения, вы можете добавить ограничение UNIQUE KEY
к полю (если это уже не ваш первичный ключ):
ALTER TABLE table ADD UNIQUE KEY column1 (column1)
, тогда вы можете написать свой запрос следующим образом:
INSERT IGNORE INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
или если вы хотите автоматически обновить другие поля, используйте ON DUPLICATE KEY UPDATE
:
INSERT INTO table(column1, column2, column3) VALUES(@value1, @value2, @value3)
ON DUPLICATE KEY UPDATE column2 = @value2, column3 = @value3
, позволяя базе данных обрабатывать ее автоматически с использованием уникального ключа, имеет несколько преимуществ:
- лучшая производительность и масштабируемость за счет использования индексов, а не полного сканирования таблиц
- отказоустойчивость - вы не можете случайно добавить две строки с одинаковым уникальным идентификатором с неправильным запросом
- лучшая читаемостьваших запросов
ПРИМЕЧАНИЕ: уникальный ключ может также занимать несколько строк.Глупый пример: комбинация «ip» и «port» может быть объединена как уникальный идентификатор «connection».