Документация MySQL LOAD DATA
синтаксис предоставляет следующую информацию:
По умолчанию, когда в конце оператора LOAD DATA
не указан список столбцов,входные строки должны содержать поле для каждого столбца таблицы. Если вы хотите загрузить только некоторые из столбцов таблицы, укажите список столбцов.
[...]
Если во входной строке слишком мало полей, столбцы таблицы для каких полей вводаотсутствуют, установлены их значения по умолчанию. Для числовых типов столбец имеет значение 0
.
[...]
Значение пустого поля интерпретируется иначе, чем отсутствующее поле: для строковых типов столбец устанавливаетсяв пустую строку.
Итак, учитывая ваши примерные данные:
1;john;doe
2;jabe;doe;;;opt val3;;;;;;opt val9;;;;;;...
Для записи с идентификатором 1
все необязательные столбцы будут иметь значение NULL
(т.е. их значение по умолчанию),Для id
2 необязательные строковые столбцы будут установлены в пустую строку. .
Я не могу сказать, будет ли это нормально для вашего варианта использования или нет. Если вам нужны постоянные значения в необязательных столбцах, доступны следующие параметры:
- предварительная обработка ввода: используйте
SET
, чтобы установить NULL
столбцы, содержащие пустую строку
LOAD DATA INFILE 'file.txt' INTO TABLE t1
SET
optional1 = NULLIF(optional1, ''),
optional2 = NULLIF(optional1, ''),
...
установить триггер BEFORE INSERT
для таблицы, который устанавливает NULL
пустые значения
запустить обновление таблицы после заселено
UPDATE t1 SET optional1 = NULLIF(option1, ''), optional2 = NULLIF(optional1, '')
WHERE '' IN (optional1, optional2, ...)