在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)
在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)
您可以創建一個臨時表中刪除主鍵項,以便它允許重複,然後插入數據。
構建這樣一個SQL語句
select count(column_with_duplicates) AS num_duplicates,column_with_duplicates
from table
group by column_with_duplicates
having num_duplicates > 1;
這將顯示與冗餘行。另一種方法是將實際插入到表中的行轉儲出來,然後對原始文件運行文件差異命令以查看哪些行未包含。
對於任何磕磕絆絆到這樣:
另一種選擇是做一個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用戶。
不知道爲什麼倒票。這只是幫助我的另一種方法。 – 2016-06-22 17:51:48
如果沒有警告,但某些行被跳過,則可能意味着主鍵被複制用於跳過的行。
找出重複的最簡單方法是在Excel中打開本地文件並在主鍵列上執行重複刪除以查看是否有任何重複。
當沒有滿足任何數據庫約束時,記錄將被跳過。檢查常見的像
我使用bash命令行來查找CSV文件中重複的行:
awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1"
當兩個第一列是主鍵時。
在我的情況下,缺少的行是由於錯誤的主鍵聲明(我有重複的行),以及缺少表中某些字段的「空」限定符(在我的導入中有時爲空)。修復表模式解決了我的缺失記錄問題。 – patricksurry 2016-10-18 23:42:54