Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполняют запрос вставки или обновления в соответствии с результатом первого запроса.
Попробуйте использовать синтаксис ON DUPLICATE KEY, это намного быстрее и лучше, чем выполнение 2 запросов. Более подробную информацию можно найти здесь
ВСТАВИТЬ В СТОЛ (a, b, c) ЗНАЧЕНИЯ (4,5,6)
ОБНОВЛЕНИЕ КЛЮЧЕВЫХ КЛЮЧЕЙ c = 9;
если вы хотите сохранить то же значение для c, вы можете выполнить обновление с тем же значением
ВСТАВИТЬ В СТОЛ (a, b, c) ЗНАЧЕНИЯ (4,5,6)
ОБНОВЛЕНИЕ КЛЮЧЕВЫХ КЛЮЧЕЙ c = 6;
разница между «заменить» и «на дубликат ключа»:
заменить: вставляет или удаляет и вставляет
на дубликате ключа: вставка или обновление
если в вашей таблице нет первичного или уникального ключа, замена не имеет никакого смысла.
Вы также можете использовать функцию VALUES
, чтобы избежать необходимости указывать фактические значения дважды. Например. вместо
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;
вы можете использовать
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
Где VALUES(c)
будет соответствовать значению, указанному выше (6).