2

私はジレンマを抱えています。ID という列を持つテーブルがあり、それが主キーです。1、2、3 のように自動的に増分され、テーブルは 1 ~ 8 です。

元プログラマーが行 7 を削除したため、現在は 6 と 8 の間にギャップがあります。8 の値を 7 に変更する必要があります。

私はいくつかのことを試しました:

  • ID 8 は ID 列なので編集できません

  • 私はクエリを試みました:

    identity_insert mytable を ON に設定

次に、行を削除し、他のスレッドが推奨するように ID を再度追加して編集します。しかし、自動番号が作動し、現在は 9 行目であり、ID を編集することはできません。ここで何が間違っているのかわかりません。これを行う方法はありますか?前もって感謝します。

4

5 に答える 5

2

おそらく、番号が連続していてギャップがないことが重要な理由IDENTITYを尋ねる必要があります。SQL の型は、実際にはこの種の機能に適していないことがわかっています。

とはいえ、ギャップを埋める必要がある場合は、もう少しで完了です。もう 1 つ必要なことは、ID フィールドに新しい開始番号を再シードすることです。SQL Server では、これは で実現されDBCC CHECKIDENTます。

ただし、これをプログラム的なものにしないでください。これは、データをクリーンアップする必要がある場合にのみ DBA タスクにする必要があり、実際にはかなりまれです (10 年間で、私は一度しか使用したことがありません)。 . そしてそれは開発データベース上にありました; ライブ環境で使用されたことはありません)。定期的に再シードしていることがわかった場合は、アプリケーションの動作を再考する必要があります。

于 2012-01-26T22:36:52.753 に答える
1

「SQLでオートナンバーをオフにする方法は?」という質問に実際に答えた人は誰もいませんでした。

PhpMyAmin は、整数フィールドを autonum に変更すると、次の SQL を表示します...

ALTER TABLE courseCHANGE Test TestINT( 11 ) NOT NULL AUTO_INCREMENT

..そしてこれは、autonumを削除すると...

ALTER TABLE courseCHANGE Test TestINT( 11 ) NOT NULL

MS ACCESS SQLで私が使用した

ALTER TABLE コース ALTER Record_ID INTEGER; 自動番号をオフにします。

自動番号をオンに戻すと、最後に使用した番号に戻ることがわかります。自動番号を 1 にリセットするには、再シードする必要があります (テーブルは空にする必要があります)。

多分それはここに着陸する次の人を助けるでしょう.

于 2012-03-12T16:25:05.863 に答える
0

不足しているギャップを見つけて、その ID を使用して挿入してください。これは有用であり、非常によく説明されています http://www.codediesel.com/mysql/sequence-gaps-in-mysql/

于 2012-01-26T22:32:11.857 に答える
0

ここで何が間違っているのかわかりません。

IDENTITY本来の用途以外に使用している。

コメントで他の人が私の前に言ったように、 の目的は、見栄えの良い数字ではなく、一意のIDENTITY数字を作成することです。 きれいな数字が必要な場合、列はそのための不適切なツールです。2 番目の (ID ではない) 列を作成し、他の方法でかなりの数を生成する必要があります。
IDENTITY

一般に、主キーの値を変更することはほとんど良い考えではありません (それがIDENTITY列であろうと単なる「通常の」主キーであろうと)。

次のシナリオを考えてみてください。

  • 変更しようとしているテーブルを参照する他のテーブルがある場合はどうしますか?
    値が使用されている他のすべてのテーブルを見つけて、そこでも変更する必要があります。( を含むテーブルと、同じものを使用するテーブルを
    考えてください) ProductsProductIdOrdersProductId

  • データベースにすでに 100,000 件のレコードがあり、誰かが行 7 を削除した場合、どうしますか? 行 8 の値を 100,000 に変更しますか?

  • 次に、100,000 の行 7 が削除されその列が他のテーブルから参照されているとします。

  • 誰かが行を削除するたびに、本当にこれを行いたいですか?

おわかりのように、Microsoft の担当者がIDENTITY値の編集を許可しないことにしたのには理由がありました。
あなたはこれをしたくありません...私を信じてください!

于 2012-01-27T00:26:58.600 に答える