1

次のような InnoDB テーブルがあります。

ID | DATA
----------
1  |   A
2  |   B
5  |   C
8  |   D
13 |   E

そして、列IDを次のようにリセットしたい:

ID | DATA
----------
1  |   A
2  |   B
3  |   C
4  |   D
5  |   E

しかし、残念ながらこれはうまくいきません:

ALTER TABLE テーブル名 AUTO_INCREMENT=1

解決策はありますか?

ありがとう

4

2 に答える 2

1

テーブルの AUTO_INCREMENT 値は、MySQL が次の新しいレコードに与える値を決定します。既存のデータには影響しません。

データを変更したい場合は、カスタム プログラムで自分で行う必要があります。(疑似コード) のようなもの:

set counter = 1;    
while fetch new record and set X to current id {
    update table set ID = counter where id = X;
    counter = counter + 1;
}

でも!- その ID を他のテーブルで使用している場合は、その値も更新する必要があります。これは非常に複雑になる可能性があります。主キーの値を変更しないようにする必要があります。

最後に、符号なし BIGINT の最大値は 18,446,744,073,709,551,615 です。近い将来、本当にその値に到達する予定ですか?

于 2013-04-10T18:23:28.843 に答える