PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да вмъкнете и изтриете данни в PostgreSQL


Въведение

Добавянето и премахването на записи от таблици са едни от най-често срещаните операции, които извършват бази данни. Добавянето на данни включва посочване на имената на таблицата и колоните, към които искате да добавите стойности, както и стойностите, които искате да въведете във всяко поле. Изтриването на записи включва идентифициране на правилния ред или редове и премахването им от таблицата.

В това ръководство ще разгледаме как да използвате SQL INSERT и DELETE команди с PostgreSQL. Това включва основния синтаксис, как да върнете информация за данните за обработените данни и как да добавите или премахнете няколко реда в един израз.



Преглед на структурата на таблицата

Преди да използвате INSERT команда, трябва да знаете структурата на таблицата, за да можете да посрещнете изискванията, наложени от колоните, типовете данни и ограниченията на таблицата. Има няколко различни начина да направите това в зависимост от клиента на вашата база данни.

Ако използвате psql клиент на командния ред, най-лесният начин да намерите тази информация е да използвате \d+ мета команда, вградена в инструмента.

Например, за да намерите структурата на таблица, наречена employee , бихте написали това:

\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

Резултатът показва имената на колоните на таблицата, типовете данни и стойностите по подразбиране, наред с други.

\d+ meta командата е достъпна само с psql клиент, така че ако използвате друг клиент, може да се наложи да потърсите директно информацията за таблицата. Можете да получите по-голямата част от съответната информация със заявка като тази:

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)

Те трябва да ви дадат добра представа за структурата на таблицата, за да можете да вмъквате стойности правилно.



Използване на INSERT за добавяне на нови записи към таблици

SQL INSERT командата се използва за добавяне на редове с данни към съществуваща таблица. След като знаете структурата на таблицата, можете да създадете команда, която съпоставя колоните на таблицата със съответните стойности, които искате да вмъкнете за новия запис.

Основният синтаксис на командата изглежда така:

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

Колоните в списъка с колони съответстват директно на стойностите, предоставени в списъка със стойности.

По подразбиране INSERT командата връща идентификатора на обекта (обикновено 0) и броя на редовете, които са били успешно вмъкнати:

INSERT 0 1

Като пример, за да вмъкнете нов служител в employee таблица, изброена по-горе, можем да напишем:

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

Тук предоставяме стойности за first_name и last_name колони, като оставяте останалите колони да се попълват със стойностите им по подразбиране. Ако направите заявка към таблицата, можете да видите, че новият запис е добавен:

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


Връщане на данни от INSERT изявления

Ако искате допълнителна информация за данните, които са били добавени към таблицата, можете да включите RETURNING клауза в края на вашето изявление. RETURNING клаузата определя колоните за показване на току-що вмъкнатите записи.

Например, за да покажете всички колони за току-що вмъкнатите записи, можете да напишете нещо подобно:

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

Използване на employee таблица, това би изглеждало така:

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

Можете също да изберете да върнете само конкретни колони от вмъквания. Например, тук се интересуваме само от идентификационния номер на новия служител:

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

Както обикновено, можете също да използвате псевдоними на колони, за да промените имената на колоните в изхода:

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 за добавяне на няколко реда наведнъж

Вмъкването на записи по един израз е по-отнемащо време и по-малко ефективно от вмъкването на няколко реда наведнъж. PostgreSQL ви позволява да посочите няколко реда, които да добавите към една и съща таблица. Всеки нов ред е капсулиран в скоби, като всеки набор от скоби е разделен със запетаи.

Основният синтаксис за вмъкване на множество записи изглежда така:

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

За employee таблица, на която се позоваваме, можете да добавите четирима нови служители в едно изявление, като напишете:

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


Използване на DELETE за премахване на редове от таблици

SQL DELETE командата се използва за премахване на редове от таблици, функционираща като допълнително действие към INSERT . За да премахнете редове от таблица, трябва да идентифицирате редовете, към които искате да насочите, като предоставите критерии за съвпадение в WHERE клауза.

Основният синтаксис изглежда така:

DELETE FROM my_tableWHERE <condition>;

Например за всеки ред в нашия employee таблица, която има своето first_name зададен на Abigail , можем да напишем това:

DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1

Връщаната стойност тук показва, че DELETE командата беше обработена с премахване на един ред.



Връщане на данни от DELETE изявления

Както при INSERT команда, можете да върнете засегнатите редове или конкретни колони от изтритите редове, като добавите RETURNING клауза:

DELETE FROM my_tableWHERE <condition>RETURNING *;

Например, можем да проверим дали правилният запис е премахнат, като върнем всички колони от изтрития employee тук:

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 за премахване на няколко реда наведнъж

Можете да премахнете няколко елемента наведнъж с DELETE чрез манипулиране на критериите за избор, посочени в WHERE клауза.

Например, за да премахнете няколко реда по идентификатор, можете да въведете нещо подобно:

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

Можете дори да пропуснете WHERE клауза за премахване на всички редове от дадена таблица:

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

Имайте предвид обаче, че използвате DELETE изпразването на таблица с данни не е толкова ефективно, колкото TRUNCATE команда, която може да премахне данни, без да сканира таблицата.



Заключение

В тази статия въведохме някои от най-важните команди, за да контролирате какви данни има във вашите PostgreSQL таблици. INSERT командата може да се използва за добавяне на нови данни към таблици, докато DELETE команда определя кои редове трябва да бъдат премахнати. И двете команди могат да връщат редовете, които засягат, и могат да работят върху няколко реда наведнъж.

Тези две команди са основните механизми, използвани за управление на увеличаване или намаляване на броя на записите, съдържащи вашата таблица. Разбирането на основния им синтаксис, както и начините, по които те могат да бъдат комбинирани с други клаузи, ще ви позволи да попълвате и почиствате таблиците си, ако е необходимо.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да променя съществуващата колона като идентичност в PostgreSQL 11.1

  2. PostgreSQL -трябва да се появи в клаузата GROUP BY или да се използва в агрегатна функция

  3. Съхранявайте изхода на заявката за избор в един масив в postgres

  4. Lumen - Създаване на връзка с базата данни по време на изпълнение

  5. Как да инсталирате Haproxy и Keepalived