0

重複の可能性:
自動インクリメント フィールドの「穴」を埋める方法は?

現在、エントリが頻繁に出入りするテーブルで自動インクリメントを使用しています。これに関する問題は、自動インクリメントがどのように機能するかによって、最終的に自動インクリメント ID が巨大になることです。

常に最後のエントリに +1 を追加したいと考えています。

例:
4 つのエントリがあり、id 4 が削除されます。次に追加されたエントリは、5 ではなく 4 の ID を取得する必要があります。

これが以前に尋ねられたかどうかはわかりません。しかし、検索した後、次の自動インクリメント番号を取得する方法に関する解決策しか見つけることができませんでした。これは、私が探しているものではありません。

4

4 に答える 4

1

auto_incrementは正当な理由でこのように設計されているため、これを行うべきではありません (たとえば、バックアップがあり、書き換えられた古い削除済み ID が含まれている場合にそれを復元したい場合、どうすればよいですか?)

しかし、あなたの質問に答えるには:使用する必要があります

ALTER TABLE `table` AUTO_INCREMENT = MAX(id)+1;

削除後、トリガーを作成できます

于 2012-10-30T12:55:59.690 に答える
0

本当にそれを実行したい場合(私は個人的に自動インクリメントを使用することをお勧めします)、最後のIDを取得し、新しい行を挿入して、他のIDに従ってIDをインクリメントする新しい行を挿入する必要があります。

于 2012-10-30T12:54:04.973 に答える
-1

これを行うことはお勧めできません。レコードが存在するか削除されたかに関係なく、ID は常に一意である必要があります。

ただし、本当にやりたい場合は、次のような方法で実行できます

select max(id) + 1 of bla;

ただし、ID が重複する可能性があるため、適切なトランザクション レベルが必要です。

于 2012-10-30T12:56:28.010 に答える
-3

最大ID値を選択して、それをインクリメントするだけです。

SELECT MAX(`id`)+1 as `new id` FROM `table`;

5つのエントリがあり、3番目が削除された場合でも、次のIDとして6が取得されます。

于 2012-10-30T12:55:02.733 に答える