3

MySQLではINSERT IGNORE、ステートメントを使用して行をテーブルに挿入しました。1 つの列が であるためUNIQUE、一部の行は挿入されませんでした (既に挿入されているため)。そのステートメントの実行後、自動インクリメント列に行間に欠落している数字があることに気付きました。後で、行が無視され、追加されなかったために発生したことに気付きました。

行が句で挿入されていない場合、自動インクリメントカウンターを増加させないようにシステムをセットアップすることは可能ですか?IGNORE

4

1 に答える 1

1

INSERT のマニュアルページからの引用:

IGNORE キーワードを使用すると、INSERT ステートメントの実行中に発生したエラーは代わりに警告として扱われます。たとえば、IGNORE を使用しない場合、テーブル内の既存の UNIQUE インデックスまたは PRIMARY KEY 値を複製する行は、重複キー エラーを引き起こし、ステートメントは中止されます。IGNORE を使用すると、行はまだ挿入されませんが、エラーは発行されません。

構文は、INSERT IGNORE特定のエラー メッセージを抑制する方法にすぎず、これらのエラーが発生する可能性があることを認識している場合や、後の段階でそれらを処理したい場合に役立ちます。舞台裏では、違反したキーのために失敗することを除いて、まだ通常の挿入があります。MySQL は挿入を行うために実際の行の値を必要とし、AUTO_INCREMENT カウンターは通常のルールに従って増加します。

  1. 列の値は NULL です。
  2. 列の値が設定されていません。
  3. 列の値がカウンターより大きい。

したがって、ロジックを再考できない限り (挿入を行う前にキー値が存在するかどうかをテストするなど)、カウンターをリセットする唯一の方法はALTER TABLEです。

ALTER TABLE t2 AUTO_INCREMENT = value;
于 2012-04-25T16:20:08.057 に答える