2010-04-30 49 views
9

在MySQL中,我用LOAD DATA LOCAL INFILE,它工作正常。最後,我收到如下消息:MYSQL:在LOAD DATA INFILE之後顯示跳過的記錄?

Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0 

如何查看被跳過記錄的行號? SHOW warnings不起作用:

mysql> show warnings; 
Empty set (0.00 sec) 
+0

在我的情況下,缺少的行是由於錯誤的主鍵聲明(我有重複的行),以及缺少表中某些字段的「空」限定符(在我的導入中有時爲空)。修復表模式解決了我的缺失記錄問題。 – patricksurry 2016-10-18 23:42:54

回答

4

您可以創建一個臨時表中刪除主鍵項,以便它允許重複,然後插入數據。

構建這樣一個SQL語句

select count(column_with_duplicates) AS num_duplicates,column_with_duplicates 
from table 
group by column_with_duplicates 
having num_duplicates > 1; 

這將顯示與冗餘行。另一種方法是將實際插入到表中的行轉儲出來,然後對原始文件運行文件差異命令以查看哪些行未包含。

3

對於任何磕磕絆絆到這樣:

另一種選擇是做一個SELECT INTO和diff的兩個文件。例如:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES (title, desc, is_viewable); 

SELECT title, desc, is_viewable INTO OUTFILE 'data_rows.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r' FROM my_table; 

然後執行FileMerge(在Mac OS X上)data.txt data_rows.txt查看差異。如果您在執行SELECT INTO時遇到拒絕訪問錯誤,請確保您:

GRANT FILE ON *.* TO 'mysql_user'@'localhost'; 
flush privileges; 

作爲mysql客戶端中的root用戶。

+1

不知道爲什麼倒票。這只是幫助我的另一種方法。 – 2016-06-22 17:51:48

7

如果沒有警告,但某些行被跳過,則可能意味着主鍵被複制用於跳過的行。

找出重複的最簡單方法是在Excel中打開本地文件並在主鍵列上執行重複刪除以查看是否有任何重複。

1

當沒有滿足任何數據庫約束時,記錄將被跳過。檢查常見的像

  • 主鍵複製
  • 獨特的關鍵條件
  • 分區條件
1

我使用bash命令行來查找CSV文件中重複的行:

awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1" 

當兩個第一列是主鍵時。