0

ユーザーがテキスト ファイルから数千のレコードをインポートするアプリケーションを開発しています。テーブルの 3 つの列に一意の制約がありますが、重複するレコードをインポートしようとすると、このエラーが発生します。

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2013-06-01 15:25:41-2013-06-01 15:25:42-null' for key 'start_time'

制約違反のために挿入が失敗すると、CakePHP はデータの挿入の試行を停止するようです。CakePHP に制約違反を単純に無視させる方法はありますか?

お時間をいただきありがとうございます。

4

2 に答える 2

1

それは、データのインポート方法と使用している RDBMS によって大きく異なります。

テキスト ファイルを 1 行ずつループし、各行の後にデータを挿入している場合、例外をキャッチして、テキスト ファイルの次の行に進むことができます。失敗した行をある種のエラー ログにプッシュすることを忘れないでください。そうすれば、失敗した挿入を見つけることができます。私が見るより大きな問題は、スローされた例外現在のトランザクションを台無しにする可能性があることです。大量のデータを挿入するには、最高のパフォーマンスを得るためにすべてを単一のトランザクションにまとめたいと思うでしょう。

MySQL および CSV ファイルを使用している場合は、使用LOAD DATA INFILEできるコマンドがあります。

于 2013-08-06T20:49:46.670 に答える
-1

問題は、一度に何千ものレコードをインポートしていることです。挿入を試みる前に行が存在するかどうかを確認すると (これが CakePHP の独自の検証のしくみだと思います)、行ごとに保存しようとすると、クエリの量が 2 倍になります。列の一意の制約を削除し、すべての行を挿入します。新しい行が挿入されたら、それらの列に一意の制約を追加してから、制約を削除します。私の場合は、新しいレコードを月に 1 回だけインポートする予定なので、これでうまくいくと思います。

于 2013-08-06T17:47:22.020 に答える