sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man infogar och tar bort data i PostgreSQL


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.




  1. ENUM (Enumeration) Datatyp i MySQL:Topp 12 fakta och användbara tips

  2. Bästa tillvägagångssätt för grupperade löpande summor

  3. PostgreSQL 8.4 ger DML-privilegier på alla tabeller till en roll

  4. Hur man återställer en SQL Server-databas på en Mac med SQL Operations Studio