sql >> Database >  >> RDS >> PostgreSQL

Gegevens invoegen en verwijderen in PostgreSQL


Inleiding

Records toevoegen aan en verwijderen uit tabellen zijn enkele van de meest voorkomende bewerkingen die databases uitvoeren. Het toevoegen van gegevens omvat het specificeren van de tabel- en kolomnamen waaraan u waarden wilt toevoegen, evenals de waarden die u in elk veld wilt invoeren. Het verwijderen van records omvat het identificeren van de juiste rij of rijen en deze uit de tabel verwijderen.

In deze handleiding behandelen we het gebruik van de SQL INSERT en DELETE commando's met PostgreSQL. Dit omvat de basissyntaxis, hoe u gegevens kunt retourneren over de gegevens die zijn verwerkt en hoe u meerdere rijen in één instructie kunt toevoegen of verwijderen.



De structuur van de tabel bekijken

Voordat u de INSERT . gebruikt opdracht, moet u de structuur van de tabel kennen, zodat u kunt voldoen aan de vereisten die worden opgelegd door de kolommen, gegevenstypen en beperkingen van de tabel. Er zijn een paar verschillende manieren om dit te doen, afhankelijk van uw databaseclient.

Als u de psql . gebruikt opdrachtregelclient, is de meest eenvoudige manier om deze informatie te vinden het gebruik van de \d+ meta-opdracht ingebouwd in de tool.

Om bijvoorbeeld de structuur te vinden van een tabel met de naam employee , zou je dit typen:

\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

De uitvoer geeft onder andere de kolomnamen, gegevenstypen en standaardwaarden van de tabel weer.

De \d+ meta-opdracht is alleen beschikbaar met de psql client, dus als u een andere client gebruikt, moet u mogelijk rechtstreeks de tabelinformatie opvragen. U kunt de meeste relevante informatie krijgen met een vraag als deze:

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)

Deze zouden u een goed idee moeten geven van de structuur van de tabel, zodat u waarden correct kunt invoegen.



INSERT gebruiken om nieuwe records aan tabellen toe te voegen

De SQL INSERT commando wordt gebruikt om rijen met gegevens toe te voegen aan een bestaande tabel. Zodra u de structuur van de tabel kent, kunt u een opdracht maken die overeenkomt met de kolommen van de tabel met de corresponderende waarden die u voor de nieuwe record wilt invoegen.

De basissyntaxis van het commando ziet er als volgt uit:

INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');

De kolommen in de kolomlijst komen direct overeen met de waarden in de waardenlijst.

Standaard is de INSERT commando retourneert de object-ID (meestal 0) en een aantal rijen die met succes zijn ingevoegd:

INSERT 0 1

Om bijvoorbeeld een nieuwe werknemer in te voegen in de employee bovenstaande tabel kunnen we typen:

INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1

Hier bieden we waarden voor de first_name en last_name kolommen terwijl u de andere kolommen laat vullen met hun standaardwaarden. Als u de tabel opvraagt, kunt u zien dat het nieuwe record is toegevoegd:

SELECT * FROM employee;
 employee_id | first_name | last_name |        last_update-------------+------------+-----------+----------------------------           1 | Bob        | Smith     | 2020-08-19 21:07:00.952454(1 row)


Gegevens retourneren van INSERT uitspraken

Als u aanvullende informatie wilt over de gegevens die aan de tabel zijn toegevoegd, kunt u de RETURNING opnemen clausule aan het einde van uw verklaring. De RETURNING clausule specificeert de kolommen die moeten worden weergegeven van de records die zojuist zijn ingevoegd.

Als u bijvoorbeeld alle kolommen wilt weergeven voor de records die zojuist zijn ingevoegd, kunt u zoiets als dit typen:

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

Gebruik van de employee tabel, ziet dit er ongeveer zo uit:

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

U kunt er ook voor kiezen om alleen specifieke kolommen uit invoegingen te retourneren. Hier zijn we bijvoorbeeld alleen geïnteresseerd in de ID van de nieuwe werknemer:

INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
 employee_id -------------           3(1 row)INSERT 0 1

Zoals gewoonlijk kunt u ook kolomaliassen gebruiken om de kolomnamen in de uitvoer te wijzigen:

INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
 Employee ID-------------           4(1 row)INSERT 0 1


INSERT gebruiken om meerdere rijen tegelijk toe te voegen

Records met één instructie tegelijk invoegen is tijdrovender en minder efficiënt dan het invoegen van meerdere rijen tegelijk. Met PostgreSQL kunt u meerdere rijen specificeren om aan dezelfde tabel toe te voegen. Elke nieuwe rij is ingekapseld tussen haakjes, waarbij elke reeks haakjes wordt gescheiden door komma's.

De basissyntaxis voor het invoegen van meerdere records ziet er als volgt uit:

INSERT INTO my_table(column_name, column_name_2)VALUES    ('value', 'value2'),    ('value3', 'value4'),    ('value5', 'value6');

Voor de employee tabel waarnaar we hebben verwezen, kunt u vier nieuwe werknemers in één enkele verklaring toevoegen door te typen:

INSERT INTO employee(first_name, last_name)VALUES    ('Abigail', 'Spencer'),    ('Tamal', 'Wayne'),    ('Katie', 'Singh'),    ('Felipe', 'Espinosa');
INSERT 0 4


DELETE gebruiken om rijen uit tabellen te verwijderen

De SQL DELETE commando wordt gebruikt om rijen uit tabellen te verwijderen, functionerend als de aanvullende actie bij INSERT . Om rijen uit een tabel te verwijderen, moet u de rijen identificeren die u wilt targeten door overeenkomstcriteria op te geven binnen een WHERE clausule.

De basissyntaxis ziet er als volgt uit:

DELETE FROM my_tableWHERE <condition>;

Bijvoorbeeld naar elke rij in onze employee tabel met zijn first_name ingesteld op Abigail , zouden we dit kunnen typen:

DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1

De geretourneerde waarde hier geeft aan dat de DELETE opdracht is verwerkt waarbij een enkele rij is verwijderd.



Gegevens teruggeven van DELETE uitspraken

Net als bij de INSERT commando, kunt u de betreffende rijen of specifieke kolommen uit de verwijderde rijen retourneren door een RETURNING toe te voegen clausule:

DELETE FROM my_tableWHERE <condition>RETURNING *;

We kunnen bijvoorbeeld controleren of het juiste record is verwijderd door alle kolommen van de verwijderde employee te retourneren. hier:

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


DELETE gebruiken om meerdere rijen tegelijk te verwijderen

U kunt meerdere items tegelijk verwijderen met DELETE door de selectiecriteria te manipuleren die zijn gespecificeerd in de WHERE clausule.

Als u bijvoorbeeld meerdere rijen op ID wilt verwijderen, typt u zoiets als dit:

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

Je kunt zelfs de WHERE . weglaten clausule om alle rijen uit een bepaalde tabel te verwijderen:

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

Houd er echter rekening mee dat het gebruik van DELETE het leegmaken van een tabel met gegevens is niet zo efficiënt als de TRUNCATE commando, dat gegevens kan verwijderen zonder de tabel te scannen.



Conclusie

In dit artikel hebben we enkele van de belangrijkste commando's geïntroduceerd om te bepalen welke gegevens in uw PostgreSQL-tabellen staan. De INSERT commando kan worden gebruikt om nieuwe gegevens aan tabellen toe te voegen, terwijl de DELETE commando specificeert welke rijen moeten worden verwijderd. Beide commando's kunnen de rijen die ze beïnvloeden teruggeven en kunnen op meerdere rijen tegelijk werken.

Deze twee opdrachten zijn de belangrijkste mechanismen die worden gebruikt om het aantal records dat uw tabel bevat te verhogen of te verlagen. Door grip te krijgen op hun basissyntaxis en de manieren waarop ze kunnen worden gecombineerd met andere clausules, kunt u uw tabellen zo nodig vullen en opschonen.




  1. Hoe groeperen per week in MySQL?

  2. bestellen op newid() - hoe werkt het?

  3. PostgreSQL:tekenreeks tot op heden DD/MM/YYYY

  4. Selecteer top 10 records voor elke categorie