PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zdefiniować klucz główny automatycznego przyrostu w PostgreSQL?

W przypadku relacyjnej bazy danych, takiej jak PostgreSQL, może to być powszechnie uważane za grzech wśród programistów nie aby dołączyć klucz podstawowy do każdej tabeli. Dlatego ważne jest, abyś dołożył wszelkich starań, aby dodać tę najważniejszą kolumnę klucza podstawowego do każdej tabeli i na szczęście Postgres zapewnia dwie metody wykonania tego zadania.

Korzystanie z typu danych szeregowych

Zdecydowanie najprostszą i najczęstszą techniką dodawania klucza podstawowego w Postgresie jest użycie SERIAL lub BIGSERIAL typy danych podczas CREATING nowy stół. Jak wskazano w oficjalnej dokumentacji, SERIAL nie jest prawdziwym typem danych, ale jest po prostu skróconą notacją, która mówi Postgresowi, aby utworzył automatycznie zwiększany, unikalny identyfikator dla określonej kolumny.

Poniżej stworzymy nasze proste books tabela z odpowiednim SERIAL typ danych dla klucza podstawowego.

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

Po prostu ustawiając nasz id kolumna jako SERIAL z PRIMARY KEY w załączeniu, Postgres poradzi sobie ze wszystkimi skomplikowanymi zakulisowymi pracami i automatycznie zwiększy nasz id kolumna z unikalną wartością klucza podstawowego dla każdego INSERT .

Korzystanie z niestandardowej sekwencji

W niektórych rzadkich przypadkach standardowa natura przyrostowa wbudowana w SERIAL i BIGSERIAL typy danych mogą nie odpowiadać Twoim potrzebom. W takich przypadkach możesz wykonać tę samą funkcję automatycznego zwiększania klucza podstawowego dla swojej kolumny, tworząc niestandardową SEQUENCE , podobnie do metody stosowanej w starszej wersji Oracle.

Być może szczególnie lubimy liczby parzyste, ale mamy też silną niechęć do wszystkiego, co jest mniejsze niż 100, więc chcemy, aby nasz klucz podstawowy był zwiększany o dwa, zaczynając od 100 dla każdej wstawki. Można to osiągnąć za pomocą niestandardowej SEQUENCE tak:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Teraz, gdy INSERT nowy rekord w naszych books tabeli, musimy obliczyć następną wartość naszej sekwencji za pomocą nextval('books_sequence') i użyj go jako naszego id .

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

SEQUENCES może być jeszcze bardziej urozmaicony w razie potrzeby, z opcjami takimi jak minvalue i maxvalue oczywiście wskazywać wartości ekstremalne, a nawet CYCLE , co pozwala sekwencji „zapętlać się” po osiągnięciu maxvalue , wracając do start wartość i rozpoczęcie wspinaczki od nowa. Znacznie więcej informacji można znaleźć w oficjalnej dokumentacji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz (pobierz) wszystkie rekordy z wielu schematów za pomocą Postgres

  2. Hibernacja:Utwórz indeks

  3. Pobierz wiek z daty w PostgreSQL

  4. Jakieś wady używania tekstu typu danych do przechowywania ciągów?

  5. Jak rejestrować zapytania w PostgreSQL