2017-02-22 11 views
0

私のテーブルには、自動インクリメント整数の列名idがあります。私はテーブルを切り捨てて、それから1から始まる挿入クエリを実行しようとすると、私は操作を削除して挿入しようとすると、それは以前の値から再開します。なぜ挿入クエリは、削除と切り捨てに対して異なる動作をするのですか?テーブルにエントリがない場合、常に1から開始する必要があります。1から切り捨て開始後に挿入します。以前の値から削除を挿入した後

例: (1)オリジナル表 enter image description here

(2)(3)テーブルを切り捨てるすべての行を削除して enter image description here

を挿入し enter image description here

+0

FYI ...削除操作の際にIDをリセットすると、id + 1の最後の値から開始します。 –

+0

削除と切り捨ての別の主な相違点であるupperを指摘しました –

+0

これは予想される動作はhttps://dev.mysql.com/doc/refman/5.7/en/delete.html見出しの自動インクリメント列の下を参照してください。すべてを削除した後にリセットする必要がある場合は、alter tableまたはdrop tableを使用してください。 –

答えて

1

電流maxに挿入autoincrement関数の値はテーブル定義に格納されます(show create table idleを実行すると表示されます) tからすべての行を削除すると彼はテーブル、オートインクリメントの値は同じままになります。テーブルを切り捨てると、基本的にテーブルが削除されて再作成され、自動インクリメントの値が0にリセットされます。

これが役に立ちます。

+0

と削除操作後に1から開始する必要がある場合、何か方法はありますか? – WeAreRight

+0

@ JoneDotosvkyには 'id> 0'がありますか? – MohaMad

+1

MohaMad氏が指摘しているように、 'ALTER TABLE tablename AUTO_INCREMENT = 1;'は開始値を1に設定する必要があります。 –

1

私はあなたがdeleteクエリの後にこのクエリを実行し、自動インクリメントをリセットしようとしていると思う:

ALTER TABLE tablename AUTO_INCREMENT = 1 ; 

注:あなたは、いくつかのIDを削除し、1にidをリセットした場合、重複キーに注意して、IDしばらく= 2またはnが存在する!

カウンタは、既に使用されている値以下の値にリセットすることはできません。 MyISAMの場合、値が現在AUTO_INCREMENT列にある最大値以下であれば、その値は現在の最大値+1にリセットされます。 InnoDBの場合、値がカラムの現在の最大値よりも小さい場合、エラーは発生せず、現在のシーケンス値は変更されません。

いくつかの他のアクションとリアクションはあなたが切り捨てそれがthis.wheneverのように振る舞うされる理由ですidAUTO INCREMENTを与えるthis topic

0

に言及したそのアイデンティティをリセットしながら、削除操作の最後の値から、その開始の場合、あなたのID。この動作を望まない場合はインデックスをidフィールドから削除してください。

関連する問題