2011-03-09 6 views
0

LOAD DATA INFILEコマンドを使用して特定のフィールドをスキップする方法を教えてください。SQL LOAD DATA INFILE質問

私は、次の表を考えてみましょう:

CREATE TABLE stuff (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL, 
    name CHAR(64) NOT NULL, 
    junk CHAR(64) NOT NULL, 
    a ENUM('N','Y') NOT NULL DEFAULT 'N', 
    PRIMARY KEY (id) 
); 

そして、私のファイル:

,name1,junk1, 
,name2,junk2, 
,name3,junk3,Y 

声明ん:

LOAD DATA INFILE 'myfile' INTO TABLE stuff FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 

は自動的に自動インクリメントをスキップし、それに対処正しく?適切にすべてを処理するようだが、これは次の警告を生成します。

Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 1 
Warning (Code 1265): Data truncated for column 'a' at row 1 
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 2 
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 3 
Warning (Code 1265): Data truncated for column 'a' at row 3 
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 4 

正しく入力データを先頭にカンマがありません取り除きます。

答えて

2

idをNULLに明示的に設定して、自動インクリメント値を使用できるようにすることができます。

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
SET id = NULL; 
私も最初のカンマを削除し、明示的にファイル内の列をリスト推薦

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(name,junk,a) 
SET id = NULL;