Introduktion
Tilføjelse og fjernelse af poster fra tabeller er nogle af de mest almindelige handlinger, som databaser udfører. Tilføjelse af data involverer at angive de tabel- og kolonnenavne, du ønsker at tilføje værdier til, samt de værdier, du ønsker at indtaste i hvert felt. Sletning af poster involverer at identificere den eller de korrekte rækker og fjerne dem fra tabellen.
I denne vejledning vil vi dække, hvordan du bruger SQL INSERT
og SLET
kommandoer med PostgreSQL. Dette inkluderer den grundlæggende syntaks, hvordan man returnerer dataoplysninger om de data, der blev behandlet, og hvordan man tilføjer eller fjerner flere rækker i en enkelt sætning.
Gennemgang af tabellens struktur
Før du bruger INSERT
kommando, skal du kende tabellens struktur, så du kan imødekomme de krav, der stilles af tabellens kolonner, datatyper og begrænsninger. Der er et par forskellige måder at gøre dette på afhængigt af din databaseklient.
Hvis du bruger psql
kommandolinjeklient, er den mest ligetil måde at finde denne information på at bruge \d+
meta-kommando indbygget i værktøjet.
For eksempel for at finde strukturen af en tabel kaldet medarbejder
, ville du skrive dette:
\d+ employee
Table "public.employee" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description-------------+-----------------------------+-----------+----------+-----------------------------------------------+----------+--------------+------------- employee_id | integer | | not null | nextval('employee_employee_id_seq'::regclass) | plain | | first_name | character varying(45) | | not null | | extended | | last_name | character varying(45) | | not null | | extended | | last_update | timestamp without time zone | | not null | now() | plain | |Indexes: "employee_pkey" PRIMARY KEY, btree (employee_id) "idx_employee_last_name" btree (last_name)Triggers: last_updated BEFORE UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION last_updated()Access method: heap
Outputtet viser blandt andet tabellens kolonnenavne, datatyper og standardværdier.
\d+
meta-kommando er kun tilgængelig med psql
klient, så hvis du bruger en anden klient, skal du muligvis forespørge tabeloplysningerne direkte. Du kan få de fleste af de relevante oplysninger med en forespørgsel som denne:
SELECT column_name, data_type, column_default, is_nullable, character_maximum_lengthFROM information_schema.columns WHERE table_name ='employee';
column_name | data_type | column_default | is_nullable | character_maximum_length-------------+-----------------------------+-----------------------------------------------+-------------+-------------------------- employee_id | integer | nextval('employee_employee_id_seq'::regclass) | NO | first_name | character varying | | NO | 45 last_name | character varying | | NO | 45 last_update | timestamp without time zone | now() | NO |(4 rows)
Disse bør give dig en god idé om tabellens struktur, så du kan indsætte værdier korrekt.
Brug af INSERT
for at tilføje nye poster til tabeller
SQL INSERT
kommando bruges til at tilføje rækker af data til en eksisterende tabel. Når du kender tabellens struktur, kan du konstruere en kommando, der matcher tabellens kolonner med de tilsvarende værdier, du ønsker at indsætte for den nye post.
Den grundlæggende syntaks for kommandoen ser sådan ud:
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');
Kolonnerne i kolonnelisten svarer direkte til værdierne i værdilisten.
Som standard er INSERT
kommando returnerer objekt-id'et (normalt 0) og et antal rækker, der blev indsat med succes:
INSERT 0 1
For eksempel at indsætte en ny medarbejder i medarbejder
tabellen ovenfor, kunne vi skrive:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1
Her angiver vi værdier for first_name
og efternavn
kolonner, mens de andre kolonner skal udfyldes med deres standardværdier. Hvis du forespørger i tabellen, kan du se, at den nye post er tilføjet:
SELECT * FROM employee;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)
Returnerer data fra INSERT
udsagn
Hvis du ønsker yderligere oplysninger om de data, der blev tilføjet til tabellen, kan du inkludere RETURNING
klausul i slutningen af din erklæring. RETURNING
klausul specificerer de kolonner, der skal vises for de poster, der lige blev indsat.
For f.eks. at få vist alle kolonnerne for de poster, der lige er blevet indsat, kan du skrive noget som dette:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2')RETURNING *;
column_name | column_name_2-------------+--------------- value | value2(1 row)INSERT 0 1
Brug af medarbejder
tabel, ville dette se sådan ud:
INSERT INTO employee(first_name, last_name)VALUES ('Sue', 'Berns')RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+-------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622(1 row)INSERT 0 1
Du kan også vælge kun at returnere specifikke kolonner fra indsættelser. For eksempel er vi her kun interesserede i den nye medarbejders ID:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
employee_id ------------- 3(1 row)INSERT 0 1
Som sædvanlig kan du også bruge kolonnealiaser til at ændre kolonnenavnene i outputtet:
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
Employee ID------------- 4(1 row)INSERT 0 1
Brug af INSERT
for at tilføje flere rækker på én gang
Det er mere tidskrævende og mindre effektivt at indsætte poster én sætning ad gangen end at indsætte flere rækker på én gang. PostgreSQL giver dig mulighed for at angive flere rækker, der skal tilføjes til den samme tabel. Hver ny række er indkapslet i parentes, med hvert sæt parenteser adskilt af kommaer.
Den grundlæggende syntaks for multi-record indsættelse ser sådan ud:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2'), ('value3', 'value4'), ('value5', 'value6');
For medarbejderen
tabel, vi har refereret til, kan du tilføje fire nye medarbejdere i en enkelt erklæring ved at skrive:
INSERT INTO employee(first_name, last_name)VALUES ('Abigail', 'Spencer'), ('Tamal', 'Wayne'), ('Katie', 'Singh'), ('Felipe', 'Espinosa');
INSERT 0 4
Brug af DELETE
for at fjerne rækker fra tabeller
SQL DELETE
kommandoen bruges til at fjerne rækker fra tabeller, der fungerer som den komplementære handling til INSERT
. For at fjerne rækker fra en tabel, skal du identificere de rækker, du ønsker at målrette mod ved at angive matchkriterier i en WHERE
klausul.
Den grundlæggende syntaks ser således ud:
DELETE FROM my_tableWHERE <condition>;
For eksempel til hver række i vores medarbejder
tabel, der har sin fornavn
indstillet til Abigail
, kunne vi skrive dette:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1
Returværdien her angiver, at DELETE
kommandoen blev behandlet med en enkelt række, der blev fjernet.
Returnerer data fra DELETE
udsagn
Som med INSERT
kommando, kan du returnere de berørte rækker eller specifikke kolonner fra de slettede rækker ved at tilføje en RETURNING
klausul:
DELETE FROM my_tableWHERE <condition>RETURNING *;
For eksempel kan vi bekræfte, at den korrekte post er fjernet ved at returnere alle kolonnerne fra den slettede medarbejder
her:
DELETE FROM employeeWHERE last_name = 'Smith'RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)DELETE 1
Brug af DELETE
for at fjerne flere rækker på én gang
Du kan fjerne flere elementer på én gang med DELETE
ved at manipulere udvælgelseskriterierne specificeret i WHERE
klausul.
For eksempel, for at fjerne flere rækker efter ID, kan du skrive noget som dette:
DELETE FROM employeeWHERE employee_id in (3,4)RETURNING *;
employee_id | first_name | last_name | last_update -------------+------------+-----------+---------------------------- 3 | Delores | Muniz | 2020-08-19 21:17:06.943608 4 | Simone | Kohler | 2020-08-19 21:19:19.298833(2 rows)DELETE 2
Du kan endda udelade
DELETE FROM employeeRETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622 6 | Tamal | Wayne | 2020-08-19 22:11:53.408531 7 | Katie | Singh | 2020-08-19 22:11:53.408531 8 | Filipe | Espinosa | 2020-08-19 22:11:53.408531(4 rows)DELETE 4
Vær dog opmærksom på, at du bruger DELETE
at tømme en tabel med data er ikke så effektivt som TRUNCATE
kommando, som kan fjerne data uden at scanne tabellen.
Konklusion
I denne artikel introducerede vi nogle af de vigtigste kommandoer til at kontrollere, hvilke data der er i dine PostgreSQL-tabeller. INSERT
kommandoen kan bruges til at tilføje nye data til tabeller, mens DELETE
kommando angiver, hvilke rækker der skal fjernes. Begge kommandoer er i stand til at returnere de rækker, de påvirker og kan fungere på flere rækker på én gang.
Disse to kommandoer er de primære mekanismer, der bruges til at administrere øgning eller formindskelse af antallet af poster, din tabel indeholder. At få styr på deres grundlæggende syntaks såvel som de måder, de kan kombineres med andre klausuler, vil give dig mulighed for at udfylde og rense dine tabeller efter behov.