Introduktion
Att lägga till och ta bort poster från tabeller är några av de vanligaste operationerna som databaser utför. Att lägga till data innebär att du specificerar tabell- och kolumnnamnen du vill lägga till värden till samt de värden du vill ange i varje fält. Att ta bort poster innebär att man identifierar rätt rad eller rader och tar bort dem från tabellen.
I den här guiden kommer vi att täcka hur du använder SQL INSERT
och DELETE
kommandon med PostgreSQL. Detta inkluderar den grundläggande syntaxen, hur man returnerar datainformation om den data som bearbetades och hur man lägger till eller tar bort flera rader i en enda sats.
Granska tabellens struktur
Innan du använder INSERT
kommandot måste du känna till tabellens struktur så att du kan tillgodose de krav som ställs av tabellens kolumner, datatyper och begränsningar. Det finns några olika sätt att göra detta beroende på din databasklient.
Om du använder psql
kommandoradsklient, är det enklaste sättet att hitta denna information att använda \d+
metakommando inbyggt i verktyget.
Till exempel för att hitta strukturen för en tabell som heter employee
, skulle du skriva detta:
\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
Utdatan visar bland annat tabellens kolumnnamn, datatyper och standardvärden.
\d+
metakommandot är endast tillgängligt med psql
klient, så om du använder en annan klient kan du behöva fråga tabellinformationen direkt. Du kan få det mesta av relevant information med en fråga som denna:
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)
Dessa bör ge dig en god uppfattning om tabellens struktur så att du kan infoga värden korrekt.
Använda INSERT
för att lägga till nya poster i tabeller
SQL INSERT
kommandot används för att lägga till rader med data till en befintlig tabell. När du väl känner till tabellens struktur kan du konstruera ett kommando som matchar tabellens kolumner med motsvarande värden du vill infoga för den nya posten.
Den grundläggande syntaxen för kommandot ser ut så här:
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');
Kolumnerna i kolumnlistan motsvarar direkt de värden som anges i värdelistan.
Som standard är INSERT
kommandot returnerar objekt-ID (vanligtvis 0) och ett antal rader som har infogats:
INSERT 0 1
Som ett exempel, för att infoga en ny anställd i employee
tabellen ovan, kan vi skriva:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1
Här tillhandahåller vi värden för first_name
och last_name
kolumner samtidigt som de andra kolumnerna ska fyllas i med sina standardvärden. Om du frågar i tabellen kan du se att den nya posten har lagts till:
SELECT * FROM employee;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)
Returnera data från INSERT
uttalanden
Om du vill ha ytterligare information om data som lades till i tabellen kan du inkludera RETURNING
klausul i slutet av ditt uttalande. RETURNING
sats anger kolumnerna som ska visas för posterna som precis infogades.
Till exempel, för att visa alla kolumner för posterna som precis infogades, kan du skriva något så här:
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
Använda employee
tabell, skulle detta se ut ungefär så här:
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 också välja att endast returnera specifika kolumner från infogningar. Här är vi till exempel bara intresserade av den nyanställdes ID:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
employee_id ------------- 3(1 row)INSERT 0 1
Som vanligt kan du också använda kolumnalias för att ändra kolumnnamnen i utdata:
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
Employee ID------------- 4(1 row)INSERT 0 1
Använda INSERT
för att lägga till flera rader samtidigt
Att infoga poster en sats åt gången är mer tidskrävande och mindre effektivt än att infoga flera rader samtidigt. PostgreSQL låter dig ange flera rader att lägga till i samma tabell. Varje ny rad är inkapslad inom parentes, med varje uppsättning parenteser separerade med kommatecken.
Den grundläggande syntaxen för infogning av flera poster ser ut så här:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2'), ('value3', 'value4'), ('value5', 'value6');
För employee
tabell som vi har refererat till, kan du lägga till fyra nya medarbetare i ett enda uttalande genom att skriva:
INSERT INTO employee(first_name, last_name)VALUES ('Abigail', 'Spencer'), ('Tamal', 'Wayne'), ('Katie', 'Singh'), ('Felipe', 'Espinosa');
INSERT 0 4
Använda DELETE
för att ta bort rader från tabeller
SQL DELETE
kommandot används för att ta bort rader från tabeller och fungerar som den kompletterande åtgärden för att INSERT
. För att ta bort rader från en tabell måste du identifiera de rader du vill rikta in dig på genom att ange matchningskriterier i en WHERE
klausul.
Den grundläggande syntaxen ser ut så här:
DELETE FROM my_tableWHERE <condition>;
Till exempel till varje rad i vår employee
tabell som har dess first_name
inställd på Abigail
, vi skulle kunna skriva detta:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1
Returvärdet här indikerar att DELETE
kommandot bearbetades med en enda rad som togs bort.
Returnera data från DELETE
uttalanden
Som med INSERT
kommandot kan du returnera de berörda raderna eller specifika kolumner från de raderade raderna genom att lägga till en RETURNING
klausul:
DELETE FROM my_tableWHERE <condition>RETURNING *;
Till exempel kan vi verifiera att rätt post har tagits bort genom att returnera alla kolumner från den borttagna employee
här:
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
Använda DELETE
för att ta bort flera rader samtidigt
Du kan ta bort flera objekt samtidigt med DELETE
genom att manipulera urvalskriterierna som anges i WHERE
klausul.
Om du till exempel vill ta bort flera rader efter ID kan du skriva något så här:
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 till och med utelämna WHERE
sats för att ta bort alla rader från en given tabell:
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
Var dock medveten om att du använder DELETE
att tömma en tabell med data är inte lika effektivt som TRUNCATE
kommando, som kan ta bort data utan att skanna tabellen.
Slutsats
I den här artikeln introducerade vi några av de viktigaste kommandona för att kontrollera vilken data som finns i dina PostgreSQL-tabeller. INSERT
kommandot kan användas för att lägga till ny data till tabeller, medan DELETE
kommandot anger vilka rader som ska tas bort. Båda kommandona kan returnera de rader de påverkar och kan arbeta på flera rader samtidigt.
Dessa två kommandon är de primära mekanismerna som används för att hantera ökning eller minskning av antalet poster som din tabell innehåller. Att få grepp om deras grundläggande syntax såväl som sätten att de kan kombineras med andra satser gör att du kan fylla i och rengöra dina tabeller efter behov.