sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan defineres en auto-inkrement primær nøgle i PostgreSQL

For en relationel database som PostgreSQL kunne det i vid udstrækning betragtes som en synd blandt udviklere ikke at inkludere en primær nøgle i hver tabel. Det er derfor afgørende, at du gør dit yderste for at tilføje den altafgørende primærnøglekolonne til hver tabel, og heldigvis tilbyder Postgres to metoder til at udføre denne opgave.

Brug af seriel datatype

Langt den enkleste og mest almindelige teknik til at tilføje en primær nøgle i Postgres er ved at bruge SERIAL eller BIGSERIAL datatyper, når CREATING et nyt bord. Som angivet i den officielle dokumentation, SERIAL er ikke en sand datatype, men er blot en stenografi, der fortæller Postgres at oprette en automatisk inkrementeret, unik identifikator for den angivne kolonne.

Nedenfor laver vi vores simple books tabel med en passende SERIAL datatype for den primære nøgle.

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

Ved blot at indstille vores id kolonne som SERIAL med PRIMARY KEY vedhæftet, vil Postgres håndtere alt det komplicerede arbejde bag kulisserne og automatisk øge vores id kolonne med en unik primær nøgleværdi for hver INSERT .

Brug af en tilpasset sekvens

I nogle sjældne tilfælde er standard inkrementelle karakter indbygget i SERIAL og BIGSERIAL datatyper passer muligvis ikke til dine behov. I disse tilfælde kan du udføre den samme automatiske inkrementerede primærnøglefunktionalitet for din kolonne ved at oprette en tilpasset SEQUENCE , svarende til metoden brugt i ældre version af Oracle.

Måske er vi særligt glade for lige tal, men vi har også en stærk afsky for alt, der er mindre end 100, så vi ønsker kun, at vores primære nøgle skal øges med to, der starter ved 100 for hver indsættelse. Dette kan opnås med en brugerdefineret SEQUENCE sådan:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Nu når vi INSERT en ny rekord i vores books tabel, skal vi evaluere den næste værdi af vores sekvens med nextval('books_sequence') og brug det som vores id .

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

SEQUENCES kan krydres endnu mere, hvis det ønskes, med muligheder som minvalue og maxvalue for selvfølgelig at angive ekstreme værdier, og endda CYCLE , som tillader sekvensen at "loope rundt", når den når maxvalue , vender tilbage til start værdi og begynde stigningen forfra. Langt mere information kan findes i den officielle dokumentation.


  1. Et følelsesløst logisk blik på SQL Server-navnekonventioner

  2. ORA-08177:kan ikke serialisere adgang til denne transaktion

  3. Udfør native sql med hibernate

  4. Opdel kommaseparerede værdier til kolonner i Oracle