sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan indsætter og sletter du data i PostgreSQL


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 Hvor klausul for at fjerne alle rækkerne fra en given tabel:

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.




  1. hvor skal jeg placere installationsressourcer (wxs-fil, dmg-script, ikon) og hvordan man konfigurerer maven antrun, når jeg implementerer selvstændig app

  2. Få optælling af poster, der er påvirket af INSERT eller UPDATE i PostgreSQL

  3. Hvordan skal jeg tackle --secure-file-priv i MySQL?

  4. Sådan indsætter og sletter du data i PostgreSQL