Один из возможных способов сделать это - создать временную таблицу, вставить в нее данные, а затем выполнить 1 запрос с объединением, чтобы вставить несуществующие записи, а затем обновить их до существующих полей.Основы будут примерно такими:
CREATE TABLE MyTable_Temp LIKE MyTable
LOAD DATA INFILE..... INTO MyTable_Temp
UPDATE MyTable INNER JOIN
MyTable_Temp
ON MyTable.ID=MyTable_Temp.ID
SET MyTable.Col1=MyTable_Temp.Col1, MyTable.Col2=MyTable_Temp.Col2.....
INSERT INTO MyTable(ID,Col1,Col2,...)
SELECT ID,Col1,Col2,...
FROM MyTable_Temp
LEFT JOIN MyTable
ON MyTable_Temp.ID = MyTable.ID
WHERE myTable.ID IS NULL
DROP TABLE MyTable_Temp
Синтаксис может быть не точным, но это должно дать вам основы.Кроме того, я знаю, что это не красиво, но оно выполняет свою работу.
Обновление
Я поменял порядок вставки и обновления, потому что выполнение вставки сначала вызывает всевставленные строки будут обновлены при вызове обновления.Если вы сначала обновите, обновятся только существующие записи.Это должно означать немного меньше работы для сервера, хотя результаты должны быть одинаковыми.