Можно ли использовать команду типа LOAD DATA INFILE для ОБНОВЛЕНИЯ строк в БД?
Псевдо таблица:
| primary_key | first_name | last_name | date_of_birth |
| 1 | John Smith | | 07/04/1982 |
На данный момент first_name содержит полное имя пользователя для многих строк. Желаемый результат - разделить данные, поэтому first_name содержит "John", а last_name содержит "Smith".
У меня есть файл CSV, который содержит желаемый формат данных:
| primary_key | first_name | last_name |
| 1 | John | Smith |
Есть ли способ использовать команду LOAD DATA INFILE для обработки файла CSV, чтобы ОБНОВИТЬ все строки в этой таблице с использованием primary_key - и не заменять какие-либо другие данные в строке во время процесса (например, date_of_birth)?
2 ответа
Нет. Хотя LOAD DATA INFILE имеет параметр REPLACE, он фактически заменит соответствующую строку, то есть удалит существующую и вставит новую.
Если вы сконфигурируете LOAD DATA INFILE так, чтобы вставлять только определенные столбцы, всем остальным будут установлены значения по умолчанию, а не значения, которые они содержат в настоящее время.
Можете ли вы изменить свой CSV-файл, чтобы вместо этого он содержал кучу операторов UPDATE? Должно быть достаточно простым с помощью некоторых регулярных выражений замен.
В этой ситуации я обычно LOAD DATA INFILE
на временную таблицу с идентичной структурой. Тогда я делаю INSERT
с ON DUPLICATE KEY UPDATE
от временной таблицы к реальной таблице. Это позволяет проверять тип данных без разрушения вашей реальной таблицы; это относительно быстро и не требует возиться с вашим файлом.csv.