2013-03-29 2 views
0

Я следующий запрос, который работает:LOAD DATA INFILE жесткий запрос

mysql -u root --local-infile=1 home -e " 
    LOAD DATA LOCAL INFILE '$1' 
    INTO TABLE $TABLE_NAME 
    FIELDS TERMINATED BY ',' 
     (size, @d2, @d3, @d4, @d5, path, @d6) 
    SET last_modified=str_to_date(
     CONCAT(@d2, ',', @d3, ',', @d4, ',', @d5), '%b,%d,%T,%Y') 

Мне также нужно установить столбец называется volume = 1. Это то, что я пробовал:

mysql -u root --local-infile=1 home -e " 
    LOAD DATA LOCAL INFILE '$1' 
    INTO TABLE $TABLE_NAME 
    FIELDS TERMINATED BY ',' 
     (size, @d2, @d3, @d4, @d5, path, @d6) 
    SET last_modified=str_to_date(
     CONCAT(@d2, ',', @d3, ',', @d4, ',', @d5), '%b,%d,%T,%Y') 
    and SET volume=1;" 

Хотя Я получаю ошибку sql. Каким будет способ коррекции volume=1 выше?

+1

Чтобы установить несколько столбцов, разделите их на ',', а не 'и'. – Barmar

ответ

2

Синтаксис должен быть:

mysql -u root --local-infile=1 home -e " 
    LOAD DATA LOCAL INFILE '$1' 
    INTO TABLE $TABLE_NAME 
    FIELDS TERMINATED BY ',' 
     (size, @d2, @d3, @d4, @d5, path, @d6) 
    SET last_modified=str_to_date(
     CONCAT(@d2, ',', @d3, ',', @d4, ',', @d5), '%b,%d,%T,%Y') 
    ,volume=1;" 

Необходимо использовать стандартный синтаксис UPDATE заявление, где ваши опции SET должны быть разделены запятой

... 
SET last_modified=blah, volume=1 

Как указано Barmar, вот ссылка на документацию MySQL в отношении LOAD DATA: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

+0

Зачем предполагать, он подтверждает это в документации: http://dev.mysql.com/doc/refman/5.1/en/load-data.html – Barmar

+0

Потому что я решил, что это безопасное предположение. Почему они изменяют синтаксис ключевого слова SET? Может быть, я не должен был говорить, что это было предположение, но это было: P –

+0

Хорошо, избавился от моего «предположения»: P –