1

mysqlにロードするためにrubyスクリプトを実行していました。エラーがあります:

Mysql :: Error:キー「PRIMARY」のエントリ「4444281482」が重複しています

私の主キーは自動インクリメントID(Big-INT)です。同じテーブルにロードするために、screenを使用して、異なるデータを使用して複数の端末でスクリプトを実行していました。この問題はこれまで発生したことはありませんが、発生すると、さまざまな端末のすべてのスクリプトでこの問題が発生する可能性があります。データセットが異なります。ランダムに発生しているようです。原因は何でしょうか?自動インクリメントフィールドに重複があるのはなぜですか?

4

2 に答える 2

0

私はこの問題を抱えていたと確信しています-それはクライアントとは何の関係もありません(つまり、私のアプリ、クエリブラウザー、CLIクライアントなどの両方で再現可能です)。

ID番号のギャップを気にしない場合は、試すことができます

ALTER TABLE `tableName` AUTO_INCREMENT = 4444281492;

(もちろん、確実に100000のように、10を超えるインデックスを追加することもできます;)同じクエリでいつでもカウンターを古い値に戻すことができます)

これにより、自動インクリメントカウンターがより大きな数に変更され、無効なインデックスがスキップされる可能性があります-この問題の原因はわかりませんが(私の場合、mysqldの再起動またはマシン全体の再起動中に持続しました)

ああ、私は追加する必要があります-私は開発サーバーでそれを行いました、これが本番である場合、私はさらなる調査をアドバイスします。

于 2012-08-22T19:33:00.370 に答える
0

さまざまなデータを使用して、さまざまな端末からスクリプトを実行しているとのことです。MySQLのマニュアルによると、エンジンがInnoDBであると仮定すると、各トランザクションは列に対して異なる量の行を挿入するためAUTO_INCREMENT、エンジンは事前に取得される行数を認識していない可能性があります。これは、重複キーエラーを受け取っている理由を説明している可能性があります。ステートメントの最後に保持されているテーブルレベルのロックを使用INSERTすると、一度に実行できるステートメントは1つだけであり、自動インクリメント番号の生成はインターリーブされません。

于 2012-08-22T19:38:01.870 に答える