sql >> Databáze >  >> RDS >> PostgreSQL

Jak definovat primární klíč automatického zvýšení v PostgreSQL

U relační databáze, jako je PostgreSQL, by to mezi vývojáři mohlo být obecně považováno za hřích ne zahrnout primární klíč do každé tabulky. Je proto zásadní, abyste udělali maximum pro to, abyste přidali tento nanejvýš důležitý sloupec primárního klíče do každé tabulky a Postgres naštěstí poskytuje dvě metody, jak tento úkol splnit.

Použití sériového datového typu

Zdaleka nejjednodušší a nejběžnější technika pro přidání primárního klíče v Postgresu je použití SERIAL nebo BIGSERIAL datové typy při CREATING nový stůl. Jak je uvedeno v oficiální dokumentaci, SERIAL není skutečný datový typ, ale je to jednoduše zkrácený zápis, který říká Postgresu, aby pro zadaný sloupec vytvořil automaticky inkrementovaný jedinečný identifikátor.

Níže vytvoříme naše jednoduché books tabulkou s příslušným SERIAL datový typ pro primární klíč.

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

Jednoduchým nastavením našeho id sloupec jako SERIAL s PRIMARY KEY přiloženo, Postgres zvládne veškerou komplikovanou práci v zákulisí a automaticky zvýší naše id sloupec s jedinečnou hodnotou primárního klíče pro každý INSERT .

Použití vlastní sekvence

V některých vzácných případech je standardní inkrementální charakter zabudován do SERIAL a BIGSERIAL datové typy nemusí vyhovovat vašim potřebám. V těchto případech můžete pro svůj sloupec provést stejnou funkci automatického zvýšení primárního klíče vytvořením vlastní SEQUENCE , podobná metodě používané ve starší verzi Oracle.

Možná máme obzvláště rádi sudá čísla, ale také máme silný odpor k čemukoli menšímu než 100, takže chceme, aby se náš primární klíč zvýšil pouze o dva počínaje 100 pro každou vložku. Toho lze dosáhnout pomocí vlastní SEQUENCE takhle:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Nyní, když INSERT nový záznam do našich books tabulky, musíme vyhodnotit další hodnotu naší sekvence pomocí nextval('books_sequence') a použijte to jako naše id .

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

SEQUENCE lze na přání ještě více okořenit pomocí možností jako minvalue a maxvalue samozřejmě indikovat extrémní hodnoty a dokonce CYCLE , což umožňuje, aby se sekvence „zacyklila“, jakmile dosáhne maxvalue , vrátíte se zpět na start hodnotu a začátek stoupání znovu. Daleko více informací lze nalézt v oficiální dokumentaci.


  1. Použijte Firebase DB s místní DB

  2. Jak používat řazení (pořadí podle) v příkazu Select v SQL Server - SQL Server / Výukový program TSQL, část 109

  3. Jak rozdělit řetězec názvu v mysql?

  4. [Video] Úvod do datových typů JSON v PostgreSQL