Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполнить запрос на вставку или обновление в соответствии с результатом первого запроса. Попробуйте использовать синтаксис ON DUPLICATE KEY, это намного быстрее и лучше, чем выполнение 2 запросов.Более подробную информацию можно найти here
INSERT INTO таблицы (а, б, в) ЗНАЧЕНИЯ (4,5,6) ПО DUPLICATE KEY UPDATE с = 9;
если вы хотите сохранить то же значение с вы можете сделать обновление с тем же значением
INSERT INTO таблицы (а, б, в) VALUES (4,5,6) ON DUPLICATE KEY UPDATE 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).
Это создало больше, чем при вводе для REPLACE INTO SET SET ip = '$ uip', lastcheck = '$ tim' – unrelativity
IS IP или lastcheck либо первичный ключ, либо уникальный индекс? – carl
Ожидается, что поведение, которое вы испытываете. Для этого одно поле должно быть первичным или уникальным. В противном случае, как MySQL знал бы, чтобы предотвратить дубликаты? Кажется, что вы должны иметь user_id в этой таблице (в качестве первичного ключа), который вы также установили при замене. – carl