logo

PostgreSQL seriel

I dette afsnit skal vi forstå arbejdet med PostgreSQL seriel pseudo-type, som giver os mulighed for at definere automatisk stigningskolonner i tabeller. Og vi ser også eksempler af PostgreSQL seriel pseudo-type .

Hvad er PostgreSQL Serial pseudo-type?

I PostgreSQL har vi en bestemt type databaseobjektgenerator kendt som Seriel , som er vant til skabe en sekvens af heltal der ofte bruges som en Primærnøgle i en tabel.

Sekvensen kan genereres ved hjælp af SERIEL pseudo-type , mens vi opretter en ny tabel, som vi kan se i følgende kommando:

 CREATE TABLE table_name( ID SERIAL ); 

PostgreSQL gør følgende, hvis vi leverer SERIEL pseudo-type til ID kolonne:

  • For det første vil PostgreSQL oprette et sekvensobjekt og derefter etablere den næste værdi skabt af sekvensen som den bestemte kolonnes foruddefinerede værdi.
  • Derefter vil PostgreSQL forbedre en IKKE NULL begrænsning til ID kolonne da en sekvens altid producerer et heltal, der er a ikke-nul værdi .
  • Endelig vil PostgreSQL give ejeren af ​​sekvensen til ID kolonne; som output fjernes sekvensobjektet, når tabellen eller ID kolonne er droppet.

Bemærk: Vi kan bruge både kommandoen til at specificere den serielle pseudo-type, da begge nedenstående kommandoer ligner hinanden.

 CREATE TABLE table_name( ID SERIAL ); 

 CREATE SEQUENCE table_name_ID_seq; CREATE TABLE table_name ( ID integer NOT NULL DEFAULT nextval('table_name_ID_seq') ); ALTER SEQUENCE table_name_ID_seq OWNED BY table_name.ID; 

Det PostgreSQL seriel pseudo-type er blevet klassificeret i tre typer, som er som følger:

    LILLE SERIE SERIE BIGSERIAL

Vi har følgende tabel, som indeholder alle Seriel pseudo-type specifikation, der understøttes af PostgreSQL:

Navn Opbevaringsstørrelse Rækkevidde
LILLE SERIE 2 bytes 1 til 32767
SERIE 4 bytes 1 til 2147483647
BIGSERIAL 8 bytes 1 til 9223372036854775807

Syntaks for PostgreSQL Seriel pseudo-type

Syntaksen for PostgreSQL Seriel pseudo-type som følger:

 variable_name SERIAL 

Eksempler på PostgreSQL SERIAL type

Lad os se forskellige eksempler for at forstå, hvordan PostgreSQL seriel pseudo-type virker .

Bemærk: Vi kan definere PRIMARY KEY-begrænsningen for SERIE-kolonnen, fordi SERIE-typen ikke indirekte opretter et indeks på kolonnen eller gør kolonnen til den primære nøglekolonne.

Vi opretter en ny tabel med CREATE-kommandoens hjælp og indsætter nogle værdier ved hjælp af INSERT-kommandoen .

I nedenstående eksempel bruger vi SKAB kommando til at generere en Biler bord ind i Organisationsdatabase:

 CREATE TABLE Cars( Car_id SERIAL PRIMARY KEY, Car_name VARCHAR NOT NULL, Car_model VARCHAR NOT NULL ); 

Produktion

Det Biler tabel er blevet oprettet efter at have udført ovenstående kommandoer, som vist på nedenstående skærmbillede:

PostgreSQL seriel

En gang Biler tabel er blevet genereret, kan vi indsætte nogle værdier i den ved hjælp af INSERT-kommandoen. Og vi kan bruge STANDARD nøgleord i kommandoen INSERT eller udelad kolonnenavnet (Car_id) .

 INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera'); 

Produktion

Efter implementering af ovenstående kommando, vil vi få følgende besked, og værdien er blevet indsat med succes i Biler bord:

PostgreSQL seriel

ELLER Bruger STANDARD søgeord med kolonnenavnet (Car_id):

 INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8'); 

Produktion

Ved implementering af ovenstående kommando vil vi få følgende besked; værdien er blevet indsat i Biler bord:

PostgreSQL seriel

Som vi kan se i ovenstående skærmbillede, indsatte PostgreSQL to rækker i Biler bord med Car_id kolonneværdier er 1 og 2 .

Efter oprettelse og indsættelse af Biler tabellens værdier, vil vi bruge VÆLG kommandoen returnerer alle rækker af Biler bord:

 SELECT * FROM Cars; 

Produktion

Efter vellykket implementering af ovenstående kommando får vi følgende resultat:

PostgreSQL seriel

Vi kan bruge pg_get_serial_sequence() funktion for at få sekvensnavnet på en SERIE kolonne i en specificeret tabel, som vi kan se i nedenstående syntaks:

 pg_get_serial_sequence('table_name','column_name') 

For at få nuværende værdi skabt af sekvensen, kan vi videregive et sekvensnavn til currval()-funktionen.

I det følgende eksempel brugte vi currval() funktion for at returnere den aktuelle værdi produceret af Biler bord Car_id_seq objekt:

 SELECT currval(pg_get_serial_sequence('Cars', 'car_id')); 

Produktion

Efter implementering af ovenstående kommando får vi nedenstående output:

PostgreSQL seriel

Vi kan bruge RETURNERER Car_id klausul i INSERT-kommandoen, hvis vi ønsker at få disse værdier skabt af sekvensen, når vi indsætter en ny række i tabellen.

Nedenstående kommando bruges til at indsætte en ny række i Biler tabel og returnerer de poster, der er genereret for Car_id kolonne.

 INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id; 

Produktion

Når vi udfører ovenstående kommando, får vi følgende output, som returnerer Car_id som 3 :

PostgreSQL seriel

Bemærk:

  • Som vi forstod ovenfor, er sekvensgenerator driften er ikke transaktionssikker, hvilket indebærer, at hver bruger får en anden værdi hvis to parallelle database forbindelser forsøger at få den næste værdi fra en sekvens.
  • Og sekvensnummeret for den bruger vil være inaktivt og skaber et hul i sekvensen if én bruger kan rulle transaktionen tilbage .

Eksempel 2

Lad os se endnu et eksempel for at lære det Seriel pseudo-type i detaljer.

Så vi vil oprette endnu et nyt bord som en Grøntsager tabel ved hjælp af CREATE-kommandoen til en lignende database det er Organisation med Veg_id kolonne som SERIE pseudo-type.

 CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL ); 

Produktion

Det Grøntsager tabel er blevet oprettet efter at have udført ovenstående kommandoer, som vist på nedenstående skærmbillede:

PostgreSQL seriel

En gang Grøntsager tabel er blevet genereret, vil vi indsætte nogle værdier i den ved hjælp af INSERT-kommandoen og udelade Veggies_id kolonne som vist i nedenstående kommando:

 INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring'); 

Produktion

Vi vil få følgende besked om implementering af ovenstående kommando: værdien er blevet indsat med succes i Grøntsager bord.

PostgreSQL seriel

Eller vi kan også bruge Standard søgeord og bruger Veggie_id kolonne som vist i følgende kommando:

scan.nextstring java
 INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter'); 

Produktion

Efter at have udført ovenstående kommando, vil vi få nedenstående besked, som siger, at enten kan vi bruge Standard søgeord eller den ignorere kolonnenavnet , vil vi få et lignende output:

PostgreSQL seriel

Derfor vil vi tilføje nogle flere værdier til Biler tabel ved hjælp af følgende kommando:

 INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Jalapeno Peppers','Fall'), ('Cucumbers','Summer'), ('Winter Squash','Winter'), ('Snow Peas','Spring'), ('Black Radish','All seasons'), ('Pumpkin','Fall'); 

Produktion

Efter at have udført ovenstående kommando, får vi nedenstående meddelelse, som viser, at værdien er blevet indsat i Grøntsager bord.

PostgreSQL seriel

Efter oprettelse og indsættelse af Grøntsager tabellens værdier, vil vi bruge VÆLG kommando for at returnere alle rækker af Grøntsager bord:

 SELECT * FROM Vegetables; 

Produktion

Efter at have implementeret ovenstående kommando, får vi nedenstående output:

PostgreSQL seriel

Oversigt

I den PostgreSQL seriel pseudo-type afsnit, har vi lært seriel pseudo-type funktionalitet, som mest bruges til at skabe en automatiske stigninger kolonneværdi for en bestemt tabel.