2016-07-20 1 views
-1

У меня есть таблица с 18 столбцами, и я хочу обновить все строки столбца page_count с помощью LOAD DATA INFILE. Файл с данными чрезвычайно прост, просто \ n разделенные значения. Я не пытаюсь здесь ничего впечатляющего; Я просто хочу обновить значения в одном столбце - около 3000 записей. Код я используюUPDATE все строки одного столбца с использованием LOAD DATA INFILE

LOAD DATA INFILE '/tmp/sbfh_counter_restore' REPLACE INTO TABLE obits FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (page_count); 

И все это делает добавить одну новую строку со всем содержимым файла сброшенных в PAGE_COUNT колонку. Что я делаю не так? Шоуд я использую phpmyadmin? Я был бы рад использовать, что, как это лучше подходит мой набор навыков;)

Я создал файл с помощью SELECT page_count FROM obits INTO outfile '/tmp/sbfh_counter_restore'

+0

Очевидно, что проблема с возвратом каретки. Попробуйте изменить '\ r \ n' для '\ n', так как на Linux это только LF (не CR + LF, как в Win). Также проверьте формат outfile. –

ответ

0

на основе того, что я могу понять из MySQL документа, он не поддерживает загрузку данных в один столбец, но это потребует, чтобы ВСЕ КОЛОНКИ присутствовали в файле в правильном порядке. По крайней мере, вы должны использовать SELECT * FROM obits INTO outfile, а затем загрузить его, так как он будет обеспечивать последовательность столбцов.

Поскольку все содержимое вашего файла было загружено в новую строку, я думаю, вы должны проверить первичный ключ (или уникальный ключ) вашей таблицы. Строки будут сопоставляться ключом и обновляться или вставляться на основе результата сопоставления. Вероятно, что page_count не является вашим основным или уникальным ключом. Надеюсь, что помогает.

+0

Я думал об этом неправильно. Я должен был создать новую таблицу из резервной копии, в которой были правильные данные в page_count, а затем скопировал только этот столбец в производственную таблицу, используя 'update obits inner join temp_obits на temp_obits.obit_id = obits.obit_id set obits.page_count = temp_obits.page_count ; ' –