sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man definierar en primärnyckel för automatisk ökning i PostgreSQL

För en relationsdatabas som PostgreSQL kan det allmänt anses vara synd bland utvecklare inte att inkludera en primärnyckel i varje tabell. Det är därför avgörande att du gör ditt yttersta för att lägga till den där viktiga primärnyckelkolumnen till varje tabell, och tack och lov erbjuder Postgres två metoder för att utföra denna uppgift.

Använda seriell datatyp

Den överlägset enklaste och vanligaste tekniken för att lägga till en primärnyckel i Postgres är att använda SERIAL eller BIGSERIAL datatyper när CREATING ett nytt bord. Som anges i den officiella dokumentationen, SERIAL är inte en sann datatyp, utan är helt enkelt stenografisk notation som talar om för Postgres att skapa en automatiskt inkrementerad, unik identifierare för den angivna kolumnen.

Nedan skapar vi våra enkla books tabell med en lämplig SERIAL datatyp för primärnyckeln.

CREATE TABLE books (
  id              SERIAL PRIMARY KEY,
  title           VARCHAR(100) NOT NULL,
  primary_author  VARCHAR(100) NULL
);

Genom att helt enkelt ställa in vårt id kolumnen som SERIAL med PRIMARY KEY bifogat kommer Postgres att hantera allt komplicerat arbete bakom kulisserna och automatiskt öka vårt id kolumn med ett unikt primärnyckelvärde för varje INSERT .

Använda en anpassad sekvens

I vissa sällsynta fall är standardinkrementella karaktär inbyggd i SERIAL och BIGSERIAL datatyper kanske inte passar dina behov. I dessa fall kan du utföra samma automatiskt inkrementerade primärnyckelfunktion för din kolumn genom att skapa en anpassad SEQUENCE , liknande metoden som används i äldre version av Oracle.

Vi kanske är särskilt förtjusta i jämna tal men har också en stark avsky för allt som är mindre än 100, så vi vill bara att vår primära nyckel ska ökas med två från 100 för varje insättning. Detta kan åstadkommas med en anpassad SEQUENCE som så:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Nu när vi INSERT en ny post i våra books tabell, måste vi utvärdera nästa värde i vår sekvens med nextval('books_sequence') och använd det som vårt id .

INSERT INTO books
  (id, title, primary_author)
VALUES
  (nextval('books_sequence'), 'The Hobbit', 'Tolkien');

SEQUENCE kan kryddas ännu mer om så önskas, med alternativ som minvalue och maxvalue för att naturligtvis indikera extrema värden, och till och med CYCLE , vilket gör att sekvensen "loopar runt" när den når maxvalue , tillbaka till start värde och börja klättringen igen. Mycket mer information finns i den officiella dokumentationen.


  1. Vad är motsvarigheten till 'beskriv tabell' i SQL Server?

  2. Hur sp_describe_first_result_set fungerar i SQL Server

  3. Hur man tar bort efterföljande blanksteg i SQL Server – RTRIM()

  4. Pivot med SQL Server 2000