MySQL では、うまくLOAD DATA LOCAL INFILE
動作するものを使用しました。最後に次のようなメッセージが表示されます。
Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0
スキップされたレコードの行番号を表示するにはどうすればよいですか? SHOW warnings
動作しません:
mysql> show warnings;
Empty set (0.00 sec)
MySQL では、うまくLOAD DATA LOCAL INFILE
動作するものを使用しました。最後に次のようなメッセージが表示されます。
Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0
スキップされたレコードの行番号を表示するにはどうすればよいですか? SHOW warnings
動作しません:
mysql> show warnings;
Empty set (0.00 sec)
警告がなく、一部の行がスキップされた場合は、スキップされた行の主キーが重複していた可能性があります。
重複を見つける最も簡単な方法は、ローカル ファイルを Excel で開き、主キー列で重複の削除を実行して、重複があるかどうかを確認することです。
重複を許可するように主キー項目を削除して一時テーブルを作成し、データを挿入することができます。
次のような SQL ステートメントを作成します。
select count(column_with_duplicates) AS num_duplicates,column_with_duplicates
from table
group by column_with_duplicates
having num_duplicates > 1;
これにより、冗長性のある行が表示されます。もう 1 つの方法は、テーブルに実際に挿入された行をダンプし、オリジナルに対してファイル差分コマンドを実行して、どの行が含まれていないかを確認することです。
これにつまずいた人のために:
もう1つのオプションは、SELECT INTOを実行し、2つのファイルを比較することです。例えば:
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ユーザーとして。
データベースの制約が満たされない場合、レコードはスキップされます。次のような一般的なものを確認してください