5

たとえば、自動採番フィールドがある場合、このフィールドを指定せずに新しいレコードを追加し、DB エンジンに選択させます。
では、削除されたレコードの番号を取得しますか? はいの場合、いつですか?

// SQL サーバー、MySQL。///

フォローアップの質問: DB エンジンが主キーに使用する数を使い果たした場合はどうなりますか?

4

11 に答える 11

15

番号。手動で指定しない限り、数字の主キーは再利用されません (これは本当に避けるべきです!)

于 2008-10-31T13:48:52.843 に答える
8

AFAIK、これはMySQLで発生する可能性があります。

InnoDBでのAUTO_INCREMENT処理のしくみ

InnoDBは、サーバーが実行されている限り、メモリ内の自動インクリメントカウンターを使用します。サーバーが停止して再起動すると、前述のように、InnoDBはテーブルへの最初のINSERTの各テーブルのカウンターを再初期化します。

サーバーの再起動後。Innodbは、以前に生成されたauto_increment値を再利用します。

推奨される修正:innodbテーブルは、再起動後にauto_increment列の次の番号のトラックを失うことはありません。

于 2008-10-31T14:02:43.970 に答える
2

通常、番号は再利用されません。

ただし、Oracle などの製品では、循環して数値を再利用するシーケンス ジェネレータを指定できます。

それらが削除されたレコードの数であるかどうかは、アプリケーションの問題です。

于 2008-10-31T13:51:24.133 に答える
2

自動採番システムに依存します。何らかのシーケンスを使用している場合、削除されたレコードの数は、シーケンスが認識していないため、再利用されません。

于 2008-10-31T13:49:21.330 に答える
1

テーブルを正しく作成する限り、数値を再利用することはありません。ただし、次を使用してID列を(とにかくMSSQLで)再シードできます。

-次に使用する番号ではなく、テーブルの最後の有効なエントリの番号を入力します

DBCC CHECKIDENT([TableName]、RESEED、[NumberYouWantToStartAt])

これはもちろん非常識です...そして決して行われるべきではありません:)

于 2008-10-31T13:54:47.903 に答える
1

truncateテーブルまたは句delete fromのないテーブルを使用しない限り、MySQLはIDを再利用しません(この場合、MySQLは内部的に単純にを実行します)。wheretruncate

于 2008-10-31T13:59:19.003 に答える
1

特にありません。キーがシーケンスまたは自動インクリメントID列から読み取られている場合、シーケンスはプラグインして次の値を生成します。ただし、これを(set identity_insert onSQL Serverで)非アクティブ化し、一意性の制約に違反しない限り、任意の数値を列に入力できます。

于 2008-10-31T13:52:51.167 に答える
1

この質問は、より正確にする必要があります。

...「OracleSequencesを使用」

...「MySQL自動番号列を使用」

...など...

于 2008-10-31T13:53:16.330 に答える
0

idを再利用するMySQLの「機能」はバグだと思います。

ファイルのアップロードの処理のようなものを考えてみましょう。データベースIDをファイル名として使用することは良い習慣です。単純で、ユーザーが指定したファイル名で悪用されるリスクはありません。

ファイルシステムが関与している場合、実際にすべてをトランザクション化することはできません...データベーストランザクションをコミットしてからファイルを書き込むか、ファイルを書き込んでデータベーストランザクションをコミットする必要がありますが、一方または両方が失敗した場合、またはクラッシュした場合、またはネットワークファイルシステムが適合している場合は、データベースに有効なレコードがあり、ファイルがないか、データベースレコードがないファイルがある可能性があります。これは、アトミックではないためです。

このような問題が発生し、サーバーが戻ってきたときに最初に行うことは、ロールバックされたトランザクションのID、つまりファイルを上書きすることです。それらのファイルは役に立ちました。

于 2009-10-30T16:17:39.437 に答える
0

いいえ、あなたの銀行があなたの account_id を再利用することを決めたとしたら、想像してみてください。

于 2010-09-10T12:25:16.450 に答える
0

ええ、それは本当にIDを生成する方法に依存します。

たとえば、GUID を主キーとして使用している場合、ランダムな新しい Guid を取得するほとんどの実装では、別の GUID を再度選択する可能性は低いですが、十分な時間が与えられ、Guid がテーブルにない場合は挿入ステートメントが実行されます。問題ありませんが、そこに既に GUID がある場合は、主キー制約違反が発生します。

于 2008-10-31T20:18:04.307 に答える