PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Je ne comprends pas comment fonctionne nextval() de postgresql, quelqu'un peut-il m'expliquer?

NEXTVAL est une fonction pour obtenir la valeur suivante d'une séquence.

La séquence est un objet qui renvoie des nombres toujours croissants, différents pour chaque appel, quelles que soient les transactions, etc.

Chaque fois que vous appelez NEXTVAL , vous obtenez un numéro différent.

Ceci est principalement utilisé pour générer des clés primaires de substitution pour vos tables.

Vous pouvez créer un tableau comme celui-ci :

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

et insérez des valeurs comme ceci :

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

et voyez ce que vous obtenez :

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

PostgreSQL offre un bon sucre de syntaxe pour cela :

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

ce qui équivaut à

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

et peut être utilisé comme ceci :

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

Notez que même si vous annulez votre instruction d'insertion ou exécutez des instructions simultanées à partir de deux sessions différentes, les valeurs de séquence renvoyées ne seront jamais les mêmes et ne seront jamais réutilisées (lisez les petits caractères dans la documentation sous CYCLE ).

Ainsi, vous pouvez être sûr que toutes les valeurs de vos clés primaires seront générées de manière unique dans la table.