In diesem Abschnitt werden wir die Funktionsweise von verstehen PostgreSQL-Seriennummer Pseudotyp, der es uns ermöglicht, zu definieren Spalten automatisch inkrementieren in Tabellen. Und wir sehen auch Beispiele des PostgreSQL Serial-Pseudotyp .
Was ist der serielle PostgreSQL-Pseudotyp?
In PostgreSQL gibt es eine bestimmte Art von Datenbankobjektgenerator, die als „ Seriell , was man gewohnt ist Erstellen Sie eine Folge von Ganzzahlen die häufig als verwendet werden Primärschlüssel in einer Tabelle.
Array zum Hinzufügen von Elementen Java
Die Sequenz kann mit Hilfe des generiert werden Pseudotyp SERIAL , während wir eine neue Tabelle erstellen, wie wir im folgenden Befehl sehen können:
CREATE TABLE table_name( ID SERIAL );
PostgreSQL führt Folgendes aus, wenn wir Folgendes bereitstellen Pseudotyp SERIAL zum AUSWEIS Spalte:
- Zunächst erstellt PostgreSQL ein Sequenzobjekt und legt dann den nächsten durch die Sequenz erstellten Wert als vordefinierten Wert der jeweiligen Spalte fest.
- Danach erweitert PostgreSQL a NOT NULL-Einschränkung zum ID-Spalte da eine Folge immer eine ganze Zahl erzeugt, die a ist Nicht-Null-Wert .
- Zuletzt stellt PostgreSQL den Eigentümer der Sequenz bereit ID-Spalte; Als Ausgabe wird das Sequenzobjekt entfernt, wenn die Tabelle oder ID-Spalte ist gefallen.
Hinweis: Wir können beide Befehle verwenden, um den seriellen Pseudotyp anzugeben, da die beiden folgenden Befehle einander ähnlich sind.
CREATE TABLE table_name( ID SERIAL );
CREATE SEQUENCE table_name_ID_seq; CREATE TABLE table_name ( ID integer NOT NULL DEFAULT nextval('table_name_ID_seq') ); ALTER SEQUENCE table_name_ID_seq OWNED BY table_name.ID;
Der PostgreSQL Serial-Pseudotyp wurde in drei Typen eingeteilt:
Wir haben die folgende Tabelle, die alle enthält Serieller Pseudotyp Spezifikation, die von PostgreSQL unterstützt wird:
Name | Speichergröße | Reichweite |
---|---|---|
KLEINE SERIE | 2 Bytes | 1 bis 32767 |
SERIE | 4 Bytes | 1 bis 2147483647 |
GROßSERIE | 8 Byte | 1 bis 9223372036854775807 |
Syntax des seriellen PostgreSQL-Pseudotyps
Die Syntax von PostgreSQL Serieller Pseudotyp wie folgt:
variable_name SERIAL
Beispiele für den PostgreSQL-Typ SERIAL
Sehen wir uns verschiedene Beispiele an, um zu verstehen, wie das funktioniert Der serielle Pseudotyp PostgreSQL funktioniert .
Hinweis: Wir können die PRIMARY KEY-Einschränkung für die SERIAL-Spalte definieren, da der SERIAL-Typ nicht indirekt einen Index für die Spalte erstellt oder die Spalte zur Primärschlüsselspalte macht.
Wir erstellen eine neue Tabelle mit Hilfe des CREATE-Befehls und fügen einige Werte mit dem INSERT-Befehl ein.
Im folgenden Beispiel verwenden wir die ERSTELLEN Befehl zum Generieren eines Autos Tisch in die Organisationsdatenbank:
CREATE TABLE Cars( Car_id SERIAL PRIMARY KEY, Car_name VARCHAR NOT NULL, Car_model VARCHAR NOT NULL );
Ausgabe
Der Autos Die Tabelle wurde nach der Ausführung der oben genannten Befehle erfolgreich erstellt, wie im folgenden Screenshot gezeigt:
Sobald die Autos Nachdem die Tabelle erstellt wurde, können wir mit dem Befehl INSERT einige Werte in sie einfügen. Und wir können das nutzen STANDARD Geben Sie im INSERT-Befehl das Schlüsselwort ein oder lassen Sie den Spaltennamen weg (Car_id) .
INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera');
Ausgabe
Nach der Implementierung des obigen Befehls erhalten wir die folgende Meldung und der Wert wurde erfolgreich in das eingefügt Autos Tisch:
ODER Verwendung der DEFAULT-Schlüsselwort mit dem Spaltennamen (Car_id):
INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8');
Ausgabe
Bei der Implementierung des obigen Befehls erhalten wir die folgende Meldung: Der Wert wurde erfolgreich in die eingefügt Autos Tisch:
Wie wir im obigen Screenshot sehen können, hat PostgreSQL zwei Zeilen in das eingefügt Autos Tisch mit der Car_id Spaltenwerte sind 1 und 2 .
Nach dem Erstellen und Einfügen des Autos Die Werte der Tabelle verwenden wir WÄHLEN Der Befehl gibt alle Zeilen zurück Autos Tisch:
SELECT * FROM Cars;
Ausgabe
Nach erfolgreicher Implementierung des obigen Befehls erhalten wir das folgende Ergebnis:
d Flip-Flop
Wir können das nutzen pg_get_serial_sequence() Funktion, um den Sequenznamen von a zu erhalten SERIE Spalte in einer angegebenen Tabelle, wie wir in der folgenden Syntax sehen können:
pg_get_serial_sequence('table_name','column_name')
Um das zu bekommen aktueller Wert Durch die von der Sequenz erstellte Sequenz können wir einen Sequenznamen an die Funktion currval() übergeben.
Im folgenden Beispiel haben wir verwendet der currval() Funktion, um den von der erzeugten aktuellen Wert zurückzugeben Autos Tisch Car_id_seq Objekt:
SELECT currval(pg_get_serial_sequence('Cars', 'car_id'));
Ausgabe
Nach der Implementierung des obigen Befehls erhalten wir die folgende Ausgabe:
Wir können das nutzen RETURNING Car_id -Klausel in den INSERT-Befehl einfügen, wenn wir die von der Sequenz erstellten Werte erhalten möchten, wenn wir eine neue Zeile in die Tabelle einfügen.
Der folgende Befehl wird verwendet, um eine neue Zeile in das einzufügen Autos Tabelle und gibt die für die generierten Datensätze zurück Car_id Spalte.
INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id;
Ausgabe
Wenn wir den obigen Befehl ausführen, erhalten wir die folgende Ausgabe, die Folgendes zurückgibt: Car_id als 3 :
Notiz:
- Wie wir oben verstanden haben, ist die Sequenzgenerator Der Vorgang ist nicht transaktionssicher, was bedeutet, dass jeder Benutzer einen anderen Wert erhält wenn zwei parallele Datenbanken Verbindungen versuchen, den nächsten Wert aus einer Sequenz abzurufen.
- Und die Sequenznummer dieses Benutzers bleibt inaktiv und erzeugt eine Lücke in der Sequenz, wenn Ein Benutzer kann die Transaktion rückgängig machen .
Beispiel2
Sehen wir uns noch ein Beispiel an, um das zu lernen Serieller Pseudotyp im Detail.
Also werden wir eine weitere neue Tabelle erstellen Gemüse Tabelle mit Hilfe des CREATE-Befehls in eine ähnliche Datenbank das ist Organisation mit dem Veg_id Spalte als SERIE Pseudotyp.
CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL );
Ausgabe
Der Gemüse Die Tabelle wurde nach der Ausführung der oben genannten Befehle erfolgreich erstellt, wie im folgenden Screenshot gezeigt:
Sobald die Gemüse Wenn die Tabelle erstellt wurde, fügen wir mit dem Befehl INSERT einige Werte ein und lassen die weg Veggies_id Spalte wie im folgenden Befehl gezeigt:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring');
Ausgabe
Bei der Implementierung des obigen Befehls erhalten wir die folgende Meldung: Der Wert wurde erfolgreich in eingefügt Gemüse Tisch.
Oder wir können auch das verwenden Standard Schlüsselwort und verwendet das Veggie_id Spalte wie im folgenden Befehl gezeigt:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter');
Ausgabe
Nachdem wir den obigen Befehl ausgeführt haben, erhalten wir die folgende Meldung, die besagt, dass wir entweder den verwenden können Standardschlüsselwort oder der Ignorieren Sie den Spaltennamen erhalten wir eine ähnliche Ausgabe:
Daher werden wir noch einige weitere Werte hinzufügen Autos Tabelle mit Hilfe des folgenden Befehls:
CSS-Kommentar
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Jalapeno Peppers','Fall'), ('Cucumbers','Summer'), ('Winter Squash','Winter'), ('Snow Peas','Spring'), ('Black Radish','All seasons'), ('Pumpkin','Fall');
Ausgabe
Nachdem wir den obigen Befehl ausgeführt haben, erhalten wir die folgende Meldung, die anzeigt, dass der Wert erfolgreich in das eingefügt wurde Gemüse Tisch.
Nach dem Erstellen und Einfügen des Gemüse Die Werte der Tabelle verwenden wir WÄHLEN Befehl zum Zurückgeben aller Zeilen des Gemüse Tisch:
SELECT * FROM Vegetables;
Ausgabe
Nach erfolgreicher Implementierung des obigen Befehls erhalten wir die folgende Ausgabe:
Überblick
Im PostgreSQL Serial-Pseudotyp Im Abschnitt haben wir die serielle Pseudotyp-Funktionalität kennengelernt, die hauptsächlich zum Erstellen eines verwendet wird automatische Erhöhungen Spaltenwert für eine bestimmte Tabelle.