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