Действительно ли возможно использовать ДАННЫЕ ЗАГРУЗКИ команда типа INFILE для ОБНОВЛЕНИЯ строк в дб?

Простой пример, где это имело бы значение, тестирует, если целое число даже или нечетно.

let buggyOdd x = x `rem` 2 == 1
buggyOdd 1 // True
buggyOdd (-1) // False (wrong!)

let odd x = x `mod` 2 == 1
odd 1 // True
odd (-1) // True

Примечание, конечно, Вы могли постараться не думать об этих проблемах, просто определив нечетный таким образом:

let odd x = x `rem` 2 /= 0
odd 1 // True
odd (-1) // True

В целом, просто помните что, для y > 0, x mod y всегда возврат что-то >= 0 в то время как x rem y возвраты 0 или что-то вроде того же знака как x.

7
задан OMG Ponies 27 December 2009 в 03:08
поделиться

2 ответа

Нет. Хотя LOAD DATA INFILE имеет параметр REPLACE, он фактически заменит рассматриваемую строку, то есть удалит существующую и вставит новую.

Если вы настроите свой LOAD DATA INFILE, чтобы вставлять только определенные столбцы, для всех остальных будут установлены значения по умолчанию , а не значения, которые они в настоящее время содержат.

Можете ли вы изменить свой CSV-файл, чтобы вместо этого он содержал кучу операторов UPDATE? Должно быть достаточно просто с помощью некоторых замен регулярных выражений.

5
ответ дан 6 December 2019 в 21:16
поделиться

В этой ситуации я обычно ЗАГРУЖАЮ ИНФАЙЛ ДАННЫХ во временную таблицу с идентичной структурой. Затем я выполняю INSERT с помощью ON DUPLICATE KEY UPDATE из временной таблицы в реальную. Это позволяет проверять типы данных, не разрушая вашу настоящую таблицу; это относительно быстро и не требует возиться с вашим файлом .csv.

7
ответ дан 6 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: