logo

PostgreSQL seriell

I denne delen skal vi forstå hvordan PostgreSQL seriell pseudo-type, som lar oss definere automatisk økning av kolonner i tabeller. Og vi ser også eksempler av PostgreSQL seriell pseudo-type .

Hva er PostgreSQL Serial pseudo-type?

I PostgreSQL har vi en spesiell type databaseobjektgenerator kjent som Seriell , som er vant til lage en sekvens av heltall som ofte brukes som en Primærnøkkel i en tabell.

Sekvensen kan genereres ved hjelp av SERIELL pseudo-type , mens vi lager en ny tabell, som vi kan se i følgende kommando:

 CREATE TABLE table_name( ID SERIAL ); 

PostgreSQL gjør følgende hvis vi tilbyr SERIELL pseudo-type til ID kolonne:

  • For det første vil PostgreSQL lage et sekvensobjekt og deretter etablere den neste verdien opprettet av sekvensen som den spesielle kolonnens forhåndsdefinerte verdi.
  • Etter det vil PostgreSQL forbedre en IKKE NULL-begrensning til ID-kolonnen siden en sekvens alltid produserer et heltall som er a ikke-nullverdi .
  • Endelig vil PostgreSQL gi eieren av sekvensen til ID kolonne; som en utgang fjernes sekvensobjektet når tabellen eller ID-kolonnen er droppet.

Merk: Vi kan bruke begge kommandoene til å spesifisere seriell pseudo-type siden begge kommandoene nedenfor ligner hverandre.

 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; 

De PostgreSQL seriell pseudo-type har blitt klassifisert i tre typer som er som følger:

    SMALLSERIAL SERIE BIGSERIAL

Vi har følgende tabell, som inneholder alle Seriell pseudo-type spesifikasjon som støttes av PostgreSQL:

Navn Oppbevaringsstørrelse Område
SMALLSERIAL 2 byte 1 til 32767
SERIE 4 byte 1 til 2147483647
BIGSERIAL 8 byte 1 til 9223372036854775807

Syntaks for PostgreSQL Seriell pseudo-type

Syntaksen til PostgreSQL Seriell pseudo-type følgende:

 variable_name SERIAL 

Eksempler på PostgreSQL SERIAL type

La oss se forskjellige eksempler for å forstå hvordan PostgreSQL seriell pseudo-type fungerer .

Merk: Vi kan definere PRIMÆRKØKKEL-begrensningen for SERIE-kolonnen fordi SERIELL-typen ikke indirekte oppretter en indeks på kolonnen eller gjør kolonnen til primærnøkkelkolonnen.

Vi lager en ny tabell med CREATE-kommandoens hjelp og setter inn noen verdier ved å bruke INSERT-kommandoen .

I eksemplet nedenfor bruker vi SKAPE kommando for å generere en Biler tabellen inn i Organisasjonsdatabase:

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

Produksjon

De Biler tabellen har blitt opprettet etter å ha utført kommandoene ovenfor, som vist i skjermbildet nedenfor:

PostgreSQL seriell

Først når Biler tabellen har blitt generert, kan vi sette inn noen verdier i den ved å bruke INSERT-kommandoen. Og vi kan bruke MISLIGHOLDE nøkkelord i INSERT-kommandoen eller utelat kolonnenavnet (Car_id) .

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

Produksjon

Etter å ha implementert kommandoen ovenfor, vil vi få følgende melding, og verdien er satt inn i Biler bord:

PostgreSQL seriell

ELLER Bruker STANDARD nøkkelord med kolonnenavnet (Car_id):

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

Produksjon

Når vi implementerer kommandoen ovenfor, får vi følgende melding; verdien har blitt satt inn i Biler bord:

PostgreSQL seriell

Som vi kan se i skjermbildet ovenfor, satte PostgreSQL inn to rader i Biler bord med Car_id kolonneverdier er 1 og 2 .

Etter å ha opprettet og satt inn Biler tabellens verdier, vil vi bruke PLUKKE UT kommandoen returnerer alle rader i Biler bord:

 SELECT * FROM Cars; 

Produksjon

Etter å ha implementert kommandoen ovenfor, vil vi få følgende resultat:

PostgreSQL seriell

Vi kan bruke pg_get_serial_sequence() funksjon for å få sekvensnavnet til en SERIE kolonne i en spesifisert tabell som vi kan se i syntaksen nedenfor:

 pg_get_serial_sequence('table_name','column_name') 

For å få nåværende verdi opprettet av sekvensen, kan vi sende et sekvensnavn til currval()-funksjonen.

I følgende eksempel brukte vi currval() funksjon for å returnere gjeldende verdi produsert av Biler bord Car_id_seq gjenstand:

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

Produksjon

Etter å ha implementert kommandoen ovenfor, vil vi få utgangen nedenfor:

PostgreSQL seriell

Vi kan bruke RETURNERER Car_id klausul i INSERT-kommandoen hvis vi ønsker å få disse verdiene opprettet av sekvensen når vi setter inn en ny rad i tabellen.

Kommandoen nedenfor brukes til å sette inn en ny rad i Biler tabellen og returnerer de postene som er generert for Car_id kolonne.

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

Produksjon

Ved å utføre kommandoen ovenfor, vil vi få følgende utgang, som returnerer Car_id som 3 :

PostgreSQL seriell

Merk:

  • Som vi forsto ovenfor, er sekvensgenerator operasjonen er ikke transaksjonssikker, noe som innebærer at hver bruker vil få en annen verdi hvis to parallelle database tilkoblinger prøver å få neste verdi fra en sekvens.
  • Og sekvensnummeret til den brukeren vil være inaktiv og skaper et gap i sekvensen if én bruker kan rulle tilbake transaksjonen .

Eksempel 2

La oss se enda et eksempel for å lære det Seriell pseudo-type i detalj.

Så vi skal lage en ny tabell som en Grønnsaker tabell ved hjelp av CREATE-kommandoen til en lignende database det er Organisasjon 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 ); 

Produksjon

De Grønnsaker tabellen har blitt opprettet etter å ha utført kommandoene ovenfor, som vist i skjermbildet nedenfor:

PostgreSQL seriell

Først når Grønnsaker tabellen har blitt generert, vil vi sette inn noen verdier i den ved å bruke INSERT-kommandoen, og utelate Veggies_id kolonne som vist i kommandoen nedenfor:

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

Produksjon

Vi vil få følgende melding om implementering av kommandoen ovenfor: verdien har blitt satt inn i Grønnsaker bord.

PostgreSQL seriell

Eller vi kan også bruke Misligholde nøkkelord og bruker Veggie_id kolonne som vist i følgende kommando:

algebra av sett
 INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter'); 

Produksjon

Etter å ha utført kommandoen ovenfor, vil vi få meldingen nedenfor, som sier at enten kan vi bruke Standard søkeord eller ignorer kolonnenavnet , vil vi få en lignende utgang:

PostgreSQL seriell

Derfor vil vi legge til noen flere verdier til Biler tabell ved hjelp av å følge kommandoen:

 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'); 

Produksjon

Etter å ha utført kommandoen ovenfor, vil vi få meldingen nedenfor, som viser at verdien har blitt satt inn i Grønnsaker bord.

PostgreSQL seriell

Etter å ha opprettet og satt inn Grønnsaker tabellens verdier, vil vi bruke PLUKKE UT kommando for å returnere alle rader i Grønnsaker bord:

 SELECT * FROM Vegetables; 

Produksjon

Etter å ha implementert kommandoen ovenfor, vil vi få utgangen nedenfor:

PostgreSQL seriell

Oversikt

I PostgreSQL seriell pseudo-type seksjonen har vi lært Serial pseudo-type funksjonalitet, som for det meste brukes til å lage en automatiske økninger kolonneverdi for en bestemt tabell.