2014-05-06 41 views
0

在此处处理批量插入,该批量插入跳过2条记录。下面说明:批量插入跳过输入文件中的一个字段

My table (works fine, Auto-incrementing Job_Id): 



create table avjobs (Job_Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
Job_Name varchar(255), Job_Seq varchar(255), Job_Date varchar(255), 
Start_Time time, End_Time time, Runtime time, Status varchar(255)); 

这里是我的csv文件:

JOB1A|0029|20140506|14:01:05|15:00:01|0:59:45|FINISHED 
JOB2B|0030|20140506|15:01:05|16:00:01|0:59:55|INITIATED 

这里是我使用的BULK INSERT:

LOAD DATA LOCAL INFILE '/tmp/jobs.csv' INTO TABLE avjobs FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; 
Query OK, 3 rows affected, 9 warnings (0.00 sec) 

这里是选择输出:

mysql> select * from avjobs; 
+--------+----------+----------+----------+------------+----------+----------+--------+ 
| Job_Id | Job_Name | Job_Seq | Job_Date | Start_Time | End_Time | Runtime | Status | 
+--------+----------+----------+----------+------------+----------+----------+--------+ 
|  1 | 0029  | 20140506 | 14:01:05 | 15:00:01 | 00:23:55 | 00:00:00 | NULL | 
|  2 | 0030  | 20140506 | 15:01:05 | 16:00:01 | 00:59:55 | 00:00:00 | NULL | 
+--------+----------+----------+----------+------------+----------+----------+--------+ 

批量插入跳过,不知何故,工作名称以及状态。

你能告诉我在语法上有什么问题吗?

+0

如果在csv的每行末尾加上一个'|'会发生什么? –

+0

可能有帮助:“如果您在Windows系统上生成了文本文件,则可能必须使用LINES TERMINATED BY'\ r \ n''才能正确读取文件...” - [dev.mysql.com ](http://dev.mysql.com/doc/refman/5.1/en/load-data.html) – showdev

+0

请在提问时不要提出要求。这让他们更难阅读,这很烦人,它不会帮助你更快。 Shift键在键盘的两侧都可用,以确保您可以触及它。请这样做。 –

回答

1

您必须指定列:

LOAD DATA LOCAL INFILE '/tmp/jobs.csv' 
INTO TABLE avjobs (Job_Name, Job_Seq, Job_Date, Start_Time, End_Time, Runtime, Status)  
FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n'; 

因为导入文件不包含您JOB_ID,看到manual

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;默认情况下, 当在LOAD DATA INFILE 语句末尾未提供列列表时,输入行预计包含每个表 列的字段。如果只想装载表格的某些列,请指定一个 列列表: