аналог replace не стирающий старой записи

alexey84

phplancer
аналог replace не стирающий старой записи

есть таблица:
id - уникальное поле
name, phone
Есть 2 гигантских файла по 380 000 записей, в одном хранится id и name в другом id и phone
сначало скрипт читает первый файл и вставляет данные в бд id и name.
потом скрипт должен прочитать второй файл и дополнить записи phone.
если делать второй запрос с помощью replace тогда будут стерты name, делать 380000 update тоже не очень хочется.
Можно ли это как то обойти, есть ли аналог replace который не будет стирать name?
 
просто такие запросы как replace можно в одном сделать 7000 запросов
REPLACE INTO tUsers(id,phone) VALUES (1,12312312) ,(1,80234),...."
а апдейтом придется делать 7000 запросов
 
это для тебя проблема? Ты ж не каждый день будешь подобные запросы выполнять?
 
таблица обновляется раз в сутки, если эту проблему не обойти буду юзать update, но это в 2 раза дольше будет чем replace, проверял
 
Столкнулся сам с аналогичной задачей и решил её следующим образом (адаптирую её к вашим условиям):

CREATE TABLE IF NOT EXISTS tmptable (
Id int null,
Phone varchar(25) null
);

TRUNCATE tmptable;

далее делаем LOAD DATA IN FILE из второго файла в эту таблицу

UPDATE maintable A, tmptable B
SET A.Phone = B.Phone
WHERE A.Id = B.Id;

Идея думаю ясна.
 
аналог replace не стирающий старой записи
INSERT IGNORE INTO ....
в доках всё написано вообще-то, хотя это и не поможет в твоем случае, так как не будет заменяться вся запись. В твоем случае нужно только одно поле заполнить так что без update не обойтись. Хотя если в этих файлах записи отсортированы по id и содержат одинаковое количество записей то проще сразу читать из двух файлов и добавлять в базу все данные.
 
Может не совсем понял задачу, но посмотри в сторону
INSERT ... ON DUPLICATE KEY

@since MySQL 4.1
 
Сверху