2014-05-06 120 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 語句末尾未提供列列表時,輸入行預計包含每個表 列的字段。如果只想裝載表格的某些列,請指定一個 列列表: