sql >> Databáze >  >> RDS >> PostgreSQL

Jak vkládat a mazat data v PostgreSQL


Úvod

Přidávání a odebírání záznamů z tabulek jsou některé z nejběžnějších operací, které databáze provádějí. Přidávání dat zahrnuje zadání názvů tabulek a sloupců, do kterých chcete přidat hodnoty, a také hodnot, které chcete zadat do jednotlivých polí. Odstranění záznamů zahrnuje identifikaci správného řádku nebo řádků a jejich odstranění z tabulky.

V této příručce se budeme zabývat tím, jak používat SQL INSERT a DELETE příkazy s PostgreSQL. To zahrnuje základní syntaxi, jak vrátit informace o datech, která byla zpracována, a jak přidat nebo odebrat více řádků v jednom příkazu.



Kontrola struktury tabulky

Před použitím INSERT musíte znát strukturu tabulky, abyste mohli vyhovět požadavkům kladeným na sloupce, datové typy a omezení tabulky. Existuje několik různých způsobů, jak toho dosáhnout v závislosti na vašem databázovém klientovi.

Pokud používáte psql příkazového řádku, nejpřímější způsob, jak najít tyto informace, je použít \d+ meta příkaz zabudovaný do nástroje.

Chcete-li například najít strukturu tabulky s názvem employee , napsali byste toto:

\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

Výstup zobrazuje mimo jiné názvy sloupců tabulky, datové typy a výchozí hodnoty.

\d+ meta příkaz je dostupný pouze s psql klienta, takže pokud používáte jiného klienta, možná budete muset přímo dotazovat informace v tabulce. Většinu relevantních informací můžete získat dotazem, jako je tento:

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)

Ty by vám měly poskytnout dobrou představu o struktuře tabulky, abyste mohli správně vkládat hodnoty.



Pomocí INSERT pro přidání nových záznamů do tabulek

SQL INSERT příkaz se používá k přidání řádků dat do existující tabulky. Jakmile znáte strukturu tabulky, můžete sestavit příkaz, který odpovídá sloupcům tabulky s odpovídajícími hodnotami, které chcete vložit do nového záznamu.

Základní syntaxe příkazu vypadá takto:

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

Sloupce v seznamu sloupců přímo odpovídají hodnotám uvedeným v seznamu hodnot.

Ve výchozím nastavení INSERT příkaz vrátí ID objektu (obvykle 0) a počet řádků, které byly úspěšně vloženy:

INSERT 0 1

Například vložení nového zaměstnance do employee výše uvedené tabulce, mohli bychom napsat:

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

Zde uvádíme hodnoty pro first_name a last_name sloupce, zatímco ostatní sloupce ponecháte naplnit svými výchozími hodnotami. Pokud zadáte dotaz na tabulku, uvidíte, že byl přidán nový záznam:

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


Vracení dat z INSERT prohlášení

Pokud chcete další informace o datech, která byla přidána do tabulky, můžete zahrnout RETURNING klauzule na konci vašeho prohlášení. RETURNING klauzule určuje sloupce k zobrazení záznamů, které byly právě vloženy.

Chcete-li například zobrazit všechny sloupce pro záznamy, které byly právě vloženy, můžete zadat něco takového:

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

Pomocí employee tabulka, bude to vypadat nějak takto:

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

Můžete se také rozhodnout vrátit pouze určité sloupce z vložení. Zde nás například zajímá pouze ID nového zaměstnance:

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

Jako obvykle můžete také použít aliasy sloupců ke změně názvů sloupců ve výstupu:

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


Pomocí INSERT přidat více řádků najednou

Vkládání záznamů po jednom příkazu je časově náročnější a méně efektivní než vkládání více řádků najednou. PostgreSQL umožňuje zadat více řádků pro přidání do stejné tabulky. Každý nový řádek je zapouzdřen v závorkách, přičemž každá sada závorek je oddělena čárkami.

Základní syntaxe pro vkládání více záznamů vypadá takto:

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

Pro employee tabulky, na kterou jsme odkazovali, můžete přidat čtyři nové zaměstnance v jediném příkazu zadáním:

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


Pomocí DELETE k odstranění řádků z tabulek

SQL DELETE příkaz se používá k odstranění řádků z tabulek, funguje jako doplňková akce k INSERT . Chcete-li odstranit řádky z tabulky, musíte určit řádky, na které chcete cílit, zadáním kritérií shody v WHERE doložka.

Základní syntaxe vypadá takto:

DELETE FROM my_tableWHERE <condition>;

Například do každého řádku v našem employee tabulka, která má své first_name nastavte na Abigail , mohli bychom napsat toto:

DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1

Vrácená hodnota zde označuje, že DELETE příkaz byl zpracován, přičemž byl odstraněn jeden řádek.



Vracení dat z DELETE prohlášení

Stejně jako u INSERT můžete vrátit dotčené řádky nebo konkrétní sloupce z odstraněných řádků přidáním RETURNING klauzule:

DELETE FROM my_tableWHERE <condition>RETURNING *;

Můžeme například ověřit, že byl odstraněn správný záznam, vrácením všech sloupců od smazaného employee zde:

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


Pomocí DELETE k odstranění více řádků najednou

Pomocí DELETE můžete odstranit více položek najednou manipulací s kritérii výběru zadanými v WHERE doložka.

Chcete-li například odstranit více řádků podle ID, můžete zadat něco takového:

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

Můžete dokonce vynechat WHERE klauzule k odstranění všech řádků z dané tabulky:

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

Uvědomte si však, že pomocí DELETE vyprázdnit tabulku dat není tak efektivní jako TRUNCATE příkaz, který může odstranit data bez skenování tabulky.



Závěr

V tomto článku jsme představili některé z nejdůležitějších příkazů pro řízení toho, jaká data jsou ve vašich tabulkách PostgreSQL. INSERT příkaz lze použít k přidání nových dat do tabulek, zatímco příkaz DELETE příkaz určuje, které řádky mají být odstraněny. Oba příkazy jsou schopny vrátit řádky, které ovlivňují, a mohou pracovat na více řádcích najednou.

Tyto dva příkazy jsou primární mechanismy používané ke správě zvýšení nebo snížení počtu záznamů, které tabulka obsahuje. Získání přehledu o jejich základní syntaxi a také o způsobech, jak je lze kombinovat s jinými klauzulemi, vám umožní naplnit a vyčistit tabulky podle potřeby.




  1. existuje nějaký způsob, jak zaznamenat všechny neúspěšné příkazy SQL v oracle 10g

  2. Výběr float v MySQL

  3. Bezpečnostní přístupy v datovém modelování. Část 3

  4. Oracle:jak UPSERT (aktualizovat nebo vložit do tabulky?)