たとえば、自動採番フィールドがある場合、このフィールドを指定せずに新しいレコードを追加し、DB エンジンに選択させます。
では、削除されたレコードの番号を取得しますか? はいの場合、いつですか?
// SQL サーバー、MySQL。///
フォローアップの質問: DB エンジンが主キーに使用する数を使い果たした場合はどうなりますか?
たとえば、自動採番フィールドがある場合、このフィールドを指定せずに新しいレコードを追加し、DB エンジンに選択させます。
では、削除されたレコードの番号を取得しますか? はいの場合、いつですか?
// SQL サーバー、MySQL。///
フォローアップの質問: DB エンジンが主キーに使用する数を使い果たした場合はどうなりますか?
番号。手動で指定しない限り、数字の主キーは再利用されません (これは本当に避けるべきです!)
AFAIK、これはMySQLで発生する可能性があります。
InnoDBは、サーバーが実行されている限り、メモリ内の自動インクリメントカウンターを使用します。サーバーが停止して再起動すると、前述のように、InnoDBはテーブルへの最初のINSERTの各テーブルのカウンターを再初期化します。
サーバーの再起動後。Innodbは、以前に生成されたauto_increment値を再利用します。 :
推奨される修正:innodbテーブルは、再起動後にauto_increment列の次の番号のトラックを失うことはありません。
通常、番号は再利用されません。
ただし、Oracle などの製品では、循環して数値を再利用するシーケンス ジェネレータを指定できます。
それらが削除されたレコードの数であるかどうかは、アプリケーションの問題です。
自動採番システムに依存します。何らかのシーケンスを使用している場合、削除されたレコードの数は、シーケンスが認識していないため、再利用されません。
テーブルを正しく作成する限り、数値を再利用することはありません。ただし、次を使用してID列を(とにかくMSSQLで)再シードできます。
-次に使用する番号ではなく、テーブルの最後の有効なエントリの番号を入力します
DBCC CHECKIDENT([TableName]、RESEED、[NumberYouWantToStartAt])
これはもちろん非常識です...そして決して行われるべきではありません:)
truncate
テーブルまたは句delete from
のないテーブルを使用しない限り、MySQLはIDを再利用しません(この場合、MySQLは内部的に単純にを実行します)。where
truncate
特にありません。キーがシーケンスまたは自動インクリメントID列から読み取られている場合、シーケンスはプラグインして次の値を生成します。ただし、これを(set identity_insert on
SQL Serverで)非アクティブ化し、一意性の制約に違反しない限り、任意の数値を列に入力できます。
この質問は、より正確にする必要があります。
...「OracleSequencesを使用」
...「MySQL自動番号列を使用」
...など...
idを再利用するMySQLの「機能」はバグだと思います。
ファイルのアップロードの処理のようなものを考えてみましょう。データベースIDをファイル名として使用することは良い習慣です。単純で、ユーザーが指定したファイル名で悪用されるリスクはありません。
ファイルシステムが関与している場合、実際にすべてをトランザクション化することはできません...データベーストランザクションをコミットしてからファイルを書き込むか、ファイルを書き込んでデータベーストランザクションをコミットする必要がありますが、一方または両方が失敗した場合、またはクラッシュした場合、またはネットワークファイルシステムが適合している場合は、データベースに有効なレコードがあり、ファイルがないか、データベースレコードがないファイルがある可能性があります。これは、アトミックではないためです。
このような問題が発生し、サーバーが戻ってきたときに最初に行うことは、ロールバックされたトランザクションのID、つまりファイルを上書きすることです。それらのファイルは役に立ちました。
いいえ、あなたの銀行があなたの account_id を再利用することを決めたとしたら、想像してみてください。
ええ、それは本当にIDを生成する方法に依存します。
たとえば、GUID を主キーとして使用している場合、ランダムな新しい Guid を取得するほとんどの実装では、別の GUID を再度選択する可能性は低いですが、十分な時間が与えられ、Guid がテーブルにない場合は挿入ステートメントが実行されます。問題ありませんが、そこに既に GUID がある場合は、主キー制約違反が発生します。