Warum würden wir eine Sequenz erstellen, selbst wenn es einen Primärschlüssel gibt?Was ist eine Sequenz (Datenbank)? Wann würden wir es brauchen?
Antwort
Der Primärschlüssel eine Spalte in einer Tabelle ist.
Der Primärschlüssel braucht einen einzigartigen Wert, der irgendwo herkommen muss.
Die Sequenz ist eine Funktion einiger Datenbankprodukte, die nur eindeutige Werte erzeugt. Es erhöht nur einen Wert und gibt ihn zurück. Das Besondere daran ist: Es gibt keine Transaktionsisolation, daher können mehrere Transaktionen nicht den gleichen Wert erhalten, die Inkrementierung wird auch nicht zurückgesetzt. Ohne eine Datenbanksequenz ist es sehr schwierig, eindeutige inkrementelle Zahlen zu erzeugen.
Andere Datenbankprodukte unterstützen Spalten, die automatisch mit einer fortlaufenden Nummer initialisiert werden.
Es gibt andere Möglichkeiten zum Erstellen eindeutiger Werte für die Primärschlüssel, z. B. Guids.
Sequence ermöglicht es Ihnen, Primärschlüssel mit einer eindeutigen, serialisierten Nummer zu füllen.
Es unterscheidet sich von einem serial
oder auto_incremement
Primärschlüssel in dem Sinne, dass:
Es ist eine tatsächliche Datenbankobjekt (müssen Sie es erstellen):
sql> create sequence NAME_OF_YOUR_SEQUENCE;
Sie könnte für unterschiedliche Datenbankbenutzer unabhängige Berechtigungen zuweisen:
sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;
Sie können eine eindeutige Nummer verwenden, die bei mehreren Tabellen (nicht nur einer) unterschiedlich ist. Angenommen, Sie haben vier Tabellen mit numerischen Primärschlüsseln, und Sie möchten eindeutige Zahlen unter diesen vier Tabellen. Sie können dafür eine Sequenz verwenden, ohne sich Gedanken darüber machen zu müssen, ob Sie die Sperrmechanismen manuell implementieren können.
Sie können ihre Zahl auf einen beliebigen Wert Sie mit
wollen ändernalter sequence
können Sie durch seine Zahlen
sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;
Also, wie unterscheidet sich eine Sequenz von einem Primärschlüssel auto_increment? Oder ist das eigentlich eine Sequenz? – Blaise
Überprüfen Sie meine aktualisierte Antwort @Blaise –
Der Primärschlüssel ist (in technischer Hinsicht) lediglich ein Index, der die Eindeutigkeit erzwingt (und auch die Abfrageleistung beschleunigt). Da gibt es einige semantische Informationen, die der "Schlüssel" für die Entity sind, die die Zeile beschreibt, aber das ist es.
Eine Sequenz ist eine völlig andere Entität; es existiert getrennt von Tabellen (wie eine gespeicherte Prozedur) und kann aufgerufen werden, um sequentielle Zahlen zu erhalten.
Die beiden werden oft zusammen verwendet, um automatische Primärschlüssel für Entitäten zu generieren, die keine sinnvollen "nativen" Schlüssel haben. Aber sie sind zwei getrennte Konzepte; Sie können Tabellen verwenden, in denen der Primärschlüssel während eines Einfügevorgangs explizit ausgefüllt wird, und Sie können Sequenzen verwenden, die zum Füllen von Nicht-PK-Spalten verwendet werden (oder sogar während einer gespeicherten Prozedur verwendet werden und nicht zum Einfügen von Datensätzen verwendet werden).
- 1. Wann brauchen wir ein .template
- 2. Was ist SAPI und wann würden Sie es verwenden?
- 3. Wann brauchen wir mehr als einen EntityManager?
- 4. Marshalling - was ist das und warum brauchen wir es?
- 5. Was tun tf.app.flags? warum brauchen wir das?
- 6. Brauchen wir wirklich NULL?
- 7. Brauchen wir wirklich "oauth_nonce"?
- 8. Wann werden wir im Frühjahr ApplicationContext.xml verwenden?
- 9. warum brauchen wir WCF
- 10. Warum brauchen wir targetNamespace?
- 11. Was ist Dojo und wie man es in asp.net verwendet? und wann sollten wir es benutzen?
- 12. Was ist ein Mock und wann sollten Sie es verwenden?
- 13. Wann würden Sie XamlServices.Transform() verwenden?
- 14. Warum brauchen wir np.squeeze()?
- 15. Warum brauchen wir Entwurfsmuster
- 16. Was ist eine ABSTRACT CLASS und INTERFACE und wann würden Sie sie in PHP verwenden?
- 17. Was ist SELF JOIN und wann würdest du es verwenden?
- 18. Was ist die "Browser-Datei" in Visual Studio 2008 und warum brauchen wir sie?
- 19. Warum brauchen wir Web-Sockets?
- 20. Warum brauchen wir einen Grobquantisierer?
- 21. Wann würden Sie PendingIntent verwenden?
- 22. Warum brauchen wir virtuelle Tabelle?
- 23. Wann sollte requestAnimationFrame verwendet werden? und warum brauchen wir requestAnimationFrame, wenn wir einen css-Übergang hatten?
- 24. Warum brauchen wir ungültige Funktionen?
- 25. Warum brauchen wir statische Konstruktoren?
- 26. Brauchen wir Fixpunktkombinatoren in C#?
- 27. Wann komprimieren Sie eine SQL Server-Datenbank?
- 28. Was ist Service Discovery und warum brauchen Sie es?
- 29. Datenbanken: Spaltencodierung, wann ist es wichtig?
- 30. PHP: Was sind Sprachkonstrukte und warum brauchen wir sie?
Wenn es keine Transaktionsisolation gibt, wie könnte es dann verwendet werden? – rapt
Es gibt keine Transaktionsisolation für die Generierung der IDs. Es gibt immer den nächsten Wert der Sequenz zurück. Transaktionsisolation würde bedeuten, dass die parallele Transaktion entweder den gleichen Wert erhält oder auf die andere Transaktion warten muss, bevor sie den nächsten Wert erhalten kann. Dies ist weder erforderlich noch nützlich. –