Простой пример, где это имело бы значение, тестирует, если целое число даже или нечетно.
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.
Нет. Хотя LOAD DATA INFILE имеет параметр REPLACE, он фактически заменит рассматриваемую строку, то есть удалит существующую и вставит новую.
Если вы настроите свой LOAD DATA INFILE, чтобы вставлять только определенные столбцы, для всех остальных будут установлены значения по умолчанию , а не значения, которые они в настоящее время содержат.
Можете ли вы изменить свой CSV-файл, чтобы вместо этого он содержал кучу операторов UPDATE? Должно быть достаточно просто с помощью некоторых замен регулярных выражений.
В этой ситуации я обычно ЗАГРУЖАЮ ИНФАЙЛ ДАННЫХ
во временную таблицу с идентичной структурой. Затем я выполняю INSERT
с помощью ON DUPLICATE KEY UPDATE
из временной таблицы в реальную. Это позволяет проверять типы данных, не разрушая вашу настоящую таблицу; это относительно быстро и не требует возиться с вашим файлом .csv.