PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Не разбирам как работи nextval() на postgresql, може ли някой да обясни?

NEXTVAL е функция за получаване на следващата стойност от последователност.

Последователността е обект, който връща непрекъснато нарастващи числа, различни за всяко повикване, независимо от транзакции и т.н.

Всеки път, когато извиквате NEXTVAL , получавате различен номер.

Това се използва главно за генериране на сурогатни първични ключове за вашите таблици.

Можете да създадете таблица като тази:

CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);

и вмъкнете стойности като тази:

INSERT
INTO    mytable (id, value)
VALUES
        (NEXTVAL('mysequence'), 1),
        (NEXTVAL('mysequence'), 2);

и вижте какво получавате:

SELECT * FROM mytable;
 id | value
----+-------
  1 |     1
  2 |     2

PostgreSQL предлага хубав синтаксис за това:

CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);

което е еквивалентно на

CREATE SEQUENCE mytable_id_seq; -- table_column_'seq'
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('mytable_id_seq'), value INT); -- it's not null and has a default value automatically

и може да се използва по следния начин:

INSERT
INTO    mytable (value)
VALUES  (1),
        (2);  -- you can omit id, it will get filled for you.

Обърнете внимание, че дори ако върнете своя израз за вмъкване или изпълните едновременни оператори от две различни сесии, върнатите стойности на последователността никога няма да бъдат същите и никога няма да бъдат използвани повторно (прочетете дребния шрифт в документите под CYCLE ).

Така че можете да сте сигурни, че всички стойности на вашите първични ключове ще бъдат генерирани уникални в таблицата.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Потокът, извлечен от Postgres, като jOOQ не връща резултати от класа

  2. Инсталиране на PL/Ruby на PostgreSQL 9.3

  3. Rails:rake db:create:all (не може да се свърже със сървъра)

  4. Анализ на Json postgresql

  5. Как да запазите данните в докеризирана Postgres база данни с помощта на томове