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

alexey84

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

есть таблица:
id - уникальное поле
name, phone
Есть 2 гигантских файла по 380 000 записей, в одном хранится id и name в другом id и phone
сначало скрипт читает первый файл и вставляет данные в бд id и name.
потом скрипт должен прочитать второй файл и дополнить записи phone.
если делать второй запрос с помощью replace тогда будут стерты name, делать 380000 update тоже не очень хочется.
Можно ли это как то обойти, есть ли аналог replace который не будет стирать name?
 

Nogrogomed

Новичок
а почему UPDATE не хочется делать? Чем он тебе так не понравился?
 

alexey84

phplancer
просто такие запросы как replace можно в одном сделать 7000 запросов
REPLACE INTO tUsers(id,phone) VALUES (1,12312312) ,(1,80234),...."
а апдейтом придется делать 7000 запросов
 

Nogrogomed

Новичок
это для тебя проблема? Ты ж не каждый день будешь подобные запросы выполнять?
 

alexey84

phplancer
таблица обновляется раз в сутки, если эту проблему не обойти буду юзать update, но это в 2 раза дольше будет чем replace, проверял
 

dadoc

Новичок
Столкнулся сам с аналогичной задачей и решил её следующим образом (адаптирую её к вашим условиям):

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;

Идея думаю ясна.
 

vovanium

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

voituk

прозревший
Может не совсем понял задачу, но посмотри в сторону
INSERT ... ON DUPLICATE KEY

@since MySQL 4.1
 
Сверху