Sie numerische Primärschlüssel der gelöschten Datensätze in einer Datenbank für zukünftige neue Datensätze wiederverwendet werden?

StackOverflow https://stackoverflow.com/questions/253522

Frage

Zum Beispiel, wenn ich ein Auto numerierte Feld habe, füge ich neue Datensätze ohne dieses Feld spezifiziert und lasse DB-Engine es für mich zu holen.
So wird es die Anzahl der gelöschten Datensatz auswählen? Wenn ja, wann?

// SQL Server, MySQL. //

Anschlussfrage: Was passiert, wenn DB-Engine läuft aus Zahlen für Primärschlüssel verwenden?

War es hilfreich?

Lösung

NO. numerischen Primärschlüssel nicht wiederverwendet werden, es sei denn Sie sie manuell angeben (Sie sollten wirklich das vermeiden!)

Andere Tipps

AFAIK, das könnte passieren in MySQL:

Wie AUTO_INCREMENT in InnoDB funktioniert :

  

InnoDB nutzt die In-Memory-Auto-Zähler erhöhen, solange der Server läuft. Wenn der Server beendet und neu gestartet, InnoDB initialisiert den Zähler für jede Tabelle für die erste INSERT auf den Tisch, wie oben beschrieben.

Nach einem Neustart des Servers. InnoDB Wiederverwendung zuvor auto_increment Werte erzeugt. :

  

Empfohlene fix:   InnoDB-Tabelle sollte nicht die Spur nächste Nummer für auto_increment Spalte verlieren nach   Neustart.

Abhängig von dem Auto-Nummerierungssystem. Wenn Sie eine Sequenz von jeder Art verwenden, wird die Anzahl der gelöschten Datensätze nicht wiederverwendet erhalten, da die Sequenz nicht über sie weiß.

Generell nein, werden die Zahlen nicht wiederverwendet werden.

Sie können jedoch - in Produkten wie Oracle - geben Sie eine Sequenz-Generator, um die Zyklen und Zahlen wiederverwenden.

Ob das sind Zahlen von gelöschten Datensätze oder nicht, ist Ihre Anwendungen das Problem.

Diese Frage muss gestellt präziser werden:

... "mit Oracle Sequences"

... "mit MySQL Autowert Spalten"

... etc ...

Solange Sie die Tabelle erstellen korrekt werden Sie nicht Zahlen wiederverwenden. Allerdings können Sie die Identitätsspalte reseed (IN MSSQL sowieso), indem Sie wie folgt vor:

- Geben Sie die Nummer des letzten gültigen Eintrags in der Tabelle nicht die nächste Nummer verwendet wird

DBCC CHECK ([Tablename], RESEED, [NumberYouWantToStartAt])

Das ist natürlich verrückt ... und sollte nie geschehen:)

MySQL nicht IDs wiederverwenden, wenn Sie die Tabelle oder truncate die Tabelle ohne delete from Klausel where (in diesem Fall MySQL, intern, einfach funktioniert ein truncate).

Nicht speziell. Wenn der Schlüssel aus einer Sequenz oder selbstinkrementierende Identitätsspalten gelesen wird die Sequenz nur entlang stecken und produziert den nächsten Wert. Sie können jedoch diese (set identity_insert on auf SQL Server) deaktivieren und stellen jede Nummer, die Sie in der Spalte wollen, solange es nicht die Einzigartigkeit Einschränkung verstößt.

Ja, es hängt wirklich von der Art und Weise Sie die ID zu erzeugen.

Wenn Sie zum Beispiel einer GUID als Primärschlüssel verwenden, die meisten Implementierungen von einer zufälligen neue Guid bekommt wahrscheinlich nicht wieder eine andere guid holen, aber es wird genügend Zeit gegeben, und wenn die Guid nicht in der Tabelle ist der Einsatz Erklärung geht in Ordnung, aber wenn es bereits ein guid dort werden Sie eine Primärschlüssel Einschränkungsverletzung erhalten.

Ich halte das MySQL „Feature“ von id ist ein Fehler wiederverwendet.

so etwas wie die Verarbeitung von Datei-Uploads in Betracht. Mit Hilfe der Datenbank-ID als Dateiname ist eine gute Praxis. Einfach, keine Gefahr von Exploits mit vom Benutzer angegebenen Dateinamen, etc

Sie können nicht wirklich alles Transaktions machen, wenn das Dateisystem beteiligt ist ... Sie werden die Datenbank-Transaktion verpflichten müssen dann die Datei schreiben oder die Datei zu schreiben und die Datenbank-Transaktion zu verpflichten, aber wenn ein oder beide ausfallen, oder Sie einen Absturz haben oder Ihr Netzwerk-Dateisystem hat einen Sitz, könnte man einen gültigen Datensatz in der Datenbank hat und keine Datei oder eine Datei ohne Datenbank-Eintrag, da die Sache nicht atomar ist.

Wenn ein solches Problem tritt auf, und das erste, was der Server tut, wenn Rückwegs ist die IDs überschreiben und damit die Dateien, von Rollback-Transaktionen, es saugt. Diese Dateien können sich als nützlich erwiesen.

Nein, vorstellen, wenn Ihre Bank Ihre account_id erneut entschieden - arghhhh !!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top