LOAD DATA INFILE .. REPLACE обнуляет существующие поля таблицы
Имеется таблица с товарами магазина:
CREATE TABLE price(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
productID INT(10) UNSIGNED NOT NULL DEFAULT '0',
name TEXT NULL DEFAULT NULL,
price FLOAT UNSIGNED NULL
...
field1 INT(10) UNSIGNED NOT NULL DEFAULT '0',
field2 TEXT NULL DEFAULT NULL,
...
PRIMARY KEY (id),
UNIQUE INDEX (productID),
) ENGINE=InnoDB;
Построено два индекса:
- id - первичный автоинкрементный ключ. При каждом обновлении данных командой LOAD DATA ... EPLACE для каждой записи эти id меняются на новые. Так как параметр REPLACE сначала удаляет существующую запись, затем добавляет ее с новым id.
- productID идентификатор товара, по которому осуществляется соответствие.
Товары обновляются из файла price.csv, который состоит из трех полей productID,name,price.
Загружаю и обновляю прайс-лист на сайте из csv-файла в таблицу InnoDB командой
LOAD DATA LOCAL INFILE 'price.csv' REPLACE INTO TABLE 'price'...;
Все отлично работает. Но поля, которых нет в файле price.csv (в данном примере field1,field2) - при обновлении обнуляются (в них прописываются значения заданные по умолчанию). Вопрос: Как сохранять существующие в таблице данные полей, которые отсутствуют в csv файле без создания промежуточных таблиц?