Für eine relationale Datenbank wie PostgreSQL könnte dies unter Entwicklern weithin als Sünde angesehen werden nicht einen Primärschlüssel in jede Tabelle aufzunehmen. Es ist daher wichtig, dass Sie Ihr Möglichstes tun, um diese äußerst wichtige Primärschlüsselspalte zu jeder Tabelle hinzuzufügen, und zum Glück bietet Postgres zwei Methoden, um diese Aufgabe zu erfüllen.
Verwenden des seriellen Datentyps
Die bei weitem einfachste und gebräuchlichste Technik zum Hinzufügen eines Primärschlüssels in Postgres ist die Verwendung von SERIAL
oder BIGSERIAL
Datentypen beim CREATING
ein neuer Tisch. Wie in der offiziellen Dokumentation angegeben, SERIAL
ist kein echter Datentyp, sondern einfach eine Kurzschreibweise, die Postgres anweist, eine automatisch inkrementierte, eindeutige Kennung für die angegebene Spalte zu erstellen.
Im Folgenden erstellen wir unsere einfachen books
Tabelle mit einem entsprechenden SERIAL
Datentyp für den Primärschlüssel.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Indem Sie einfach unsere id
setzen Spalte als SERIAL
mit PRIMARY KEY
angehängt, Postgres übernimmt die ganze komplizierte Arbeit hinter den Kulissen und erhöht automatisch unsere id
Spalte mit einem eindeutigen Primärschlüsselwert für jeden INSERT
.
Eine benutzerdefinierte Sequenz verwenden
In einigen seltenen Fällen ist die inkrementelle Standardnatur in SERIAL
eingebaut und BIGSERIAL
Datentypen entsprechen möglicherweise nicht Ihren Anforderungen. In diesen Fällen können Sie dieselbe Funktion für den automatisch inkrementierten Primärschlüssel für Ihre Spalte ausführen, indem Sie eine benutzerdefinierte SEQUENCE
erstellen , ähnlich der Methode, die in älteren Versionen von Oracle verwendet wird.
Vielleicht mögen wir gerade Zahlen besonders, haben aber auch eine starke Abneigung gegen alles, was kleiner als 100 ist, also wollen wir, dass unser Primärschlüssel nur um zwei erhöht wird, beginnend bei 100 für jede Einfügung. Dies kann mit einer benutzerdefinierten SEQUENCE
erreicht werden so:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Wenn wir jetzt INSERT
ein neuer Rekord in unseren books
Tabelle müssen wir den nächsten Wert unserer Sequenz mit nextval('books_sequence')
auswerten und verwenden Sie diese als unsere id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
kann auf Wunsch mit Optionen wie minvalue
noch mehr aufgepeppt werden und maxvalue
um natürlich Extremwerte anzuzeigen, und sogar CYCLE
, wodurch die Sequenz „in einer Schleife herumlaufen“ kann, sobald sie den maxvalue
erreicht , zurück zum start
Wert und beginnen den Aufstieg von vorne. Weit mehr Informationen finden Sie in der offiziellen Dokumentation.