Въведение
Добавянето и премахването на записи от таблици са едни от най-често срещаните операции, които извършват бази данни. Добавянето на данни включва посочване на имената на таблицата и колоните, към които искате да добавите стойности, както и стойностите, които искате да въведете във всяко поле. Изтриването на записи включва идентифициране на правилния ред или редове и премахването им от таблицата.
В това ръководство ще разгледаме как да използвате 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
команда определя кои редове трябва да бъдат премахнати. И двете команди могат да връщат редовете, които засягат, и могат да работят върху няколко реда наведнъж.
Тези две команди са основните механизми, използвани за управление на увеличаване или намаляване на броя на записите, съдържащи вашата таблица. Разбирането на основния им синтаксис, както и начините, по които те могат да бъдат комбинирани с други клаузи, ще ви позволи да попълвате и почиствате таблиците си, ако е необходимо.