PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So definieren Sie einen Auto-Increment-Primärschlüssel in PostgreSQL

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.