15

MySQL では、うまくLOAD DATA LOCAL INFILE動作するものを使用しました。最後に次のようなメッセージが表示されます。

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

スキップされたレコードの行番号を表示するにはどうすればよいですか? SHOW warnings動作しません:

mysql> show warnings;
Empty set (0.00 sec)
4

5 に答える 5

11

警告がなく、一部の行がスキップされた場合は、スキップされた行の主キーが重複していた可能性があります。

重複を見つける最も簡単な方法は、ローカル ファイルを Excel で開き、主キー列で重複の削除を実行して、重複があるかどうかを確認することです。

于 2014-02-22T05:15:18.453 に答える
5

重複を許可するように主キー項目を削除して一時テーブルを作成し、データを挿入することができます。

次のような SQL ステートメントを作成します。

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

これにより、冗長性のある行が表示されます。もう 1 つの方法は、テーブルに実際に挿入された行をダンプし、オリジナルに対してファイル差分コマンドを実行して、どの行が含まれていないかを確認することです。

于 2011-04-18T03:12:38.437 に答える
4

これにつまずいた人のために:

もう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ユーザーとして。

于 2013-02-20T18:23:42.757 に答える
1

データベースの制約が満たされない場合、レコードはスキップされます。次のような一般的なものを確認してください

  • 主キーの複製
  • 固有キー条件
  • 分割条件
于 2015-08-25T20:48:31.553 に答える