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:
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:
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:
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:
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:
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:
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 :
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:
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.
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:
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.
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:
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.