sql >> Database >  >> RDS >> PostgreSQL

Ik begrijp niet hoe nextval() van postgresql werkt, kan iemand dat uitleggen?

NEXTVAL is een functie om de volgende waarde uit een reeks te halen.

Volgorde is een object dat steeds grotere aantallen retourneert, verschillend voor elke oproep, ongeacht transacties enz.

Elke keer dat u NEXTVAL . belt , krijg je een ander nummer.

Dit wordt voornamelijk gebruikt om surrogaat primaire sleutels voor uw tabellen te genereren.

U kunt een tabel als volgt maken:

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

en voeg waarden als volgt in:

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

en kijk wat je krijgt:

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

PostgreSQL biedt hiervoor een mooie syntax-suiker:

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

wat gelijk is aan

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

en kan als volgt worden gebruikt:

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

Merk op dat zelfs als u uw insert-instructie terugdraait of gelijktijdige instructies uitvoert vanuit twee verschillende sessies, de geretourneerde reekswaarden nooit hetzelfde zullen zijn en nooit opnieuw zullen worden gebruikt (lees de kleine lettertjes in de documenten echter onder CYCLE ).

U kunt er dus zeker van zijn dat alle waarden van uw primaire sleutels uniek worden gegenereerd in de tabel.




  1. Voorbeelden van JDBC-verklaringen - Invoegen, verwijderen, bijwerken, record selecteren

  2. Telt Postgresql varchar met unicode-tekenlengte of ASCII-tekenlengte?

  3. Hoe voer ik een .sql-bestand uit in de Oracle SQL-ontwikkelaarstool om de database te importeren?

  4. Hoe kan ik cPanel gebruiken om php-bestanden en database te uploaden?