jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

mariadbでCSVインポートできない

Q&A

Closed

load data infile 'C:\calender.csv' into table r_calender fields terminated by ',';

でmariadbでCSVインポートしようとすると、

ERROR 1062 (23000): Duplicate entry '2023' for key 'PRIMARY'

のエラーが出ます。
このエラーを調査したところ、既存データのprimaryと競合している際に発生するようですが、該当テーブルはまだ0件の状態です。

auto_incrementを確認したところ、2025になっていました。

試しに、

ALTER TABLE r_carender AUTO_INCREMENT = 1;

で初期化した上で再度CSVインポートしてみましたが、またauto_incremantが2025になってしまい、同じエラーです。

原因究明にご協力いただければ幸いです。
不足情報があればご指摘いただければと存じます。
よろしくお願いいたします。

0

2Answer

CSV内のauto_incrementの列はどうしていますか?
auto_incrementの列でもNULL以外が指定されるとその値でINSERTされますので、CSV上で値が指定されていれば重複の可能性があります。

1Like

Comments

  1. @jackytom

    Questioner

    回答ありがとうございます。
    auto_incrementの列はnullにしてました。

  2. 先に確認しておくべきでしたが、auto_incrementの列は主キーですか?
    auto_incrementであることと主キーであることは別の話なのでauto_incrementとは無関係のところでキー重複している可能性があります。

auto_incrementの列はnullにしてました

とのことですが、CSVの全行で当該カラムが漏れなくNULLになっていますか?
(1か所だけ変なデータが紛れ込んでいる……等が原因の可能性もあります)


または試行錯誤が許される環境であれば

  1. 元のCSVから先頭数行だけ複製した別のCSVで、インポートが成功するか確認する
  2. テーブル初期化
  3. Duplicate entry で失敗するようになるギリギリの行を、CSVに含める行を増減させつつインポート&テーブル初期化を繰り返して見つける
    (おそらく2024行前後?)
  4. 「この行を含めると失敗する」という問題の行が見つかったら
    • その問題の行を単独でinsertすることは可能か?を確認
    • その問題の行を飛ばして次の行を含めたCSVのインポートは可能か?を確認

……などを試していくと、原因の切り分けができるかもしれません。

1Like

Comments

  1. @jackytom

    Questioner

    回答ありがとうございます。
    再度確認したところ、auto_incrementの項目に値が入ってました。
    ExcelからCSV保存する際に罫線の書き忘れで発生したようです。
    再度ファイルを作り直したら成功しました。
    初歩的なミスでお騒がせしてしまい、申し訳ありませんでした。
    本件、クローズさせていただきます。

Your answer might help someone💌