Wprowadzenie
Dodawanie i usuwanie rekordów z tabel to jedne z najczęstszych operacji wykonywanych przez bazy danych. Dodawanie danych polega na określeniu nazw tabel i kolumn, do których chcesz dodać wartości, a także wartości, które chcesz wprowadzić w poszczególnych polach. Usuwanie rekordów obejmuje zidentyfikowanie prawidłowego wiersza lub wierszy i usunięcie ich z tabeli.
W tym przewodniku omówimy, jak używać SQL INSERT
i DELETE
polecenia z PostgreSQL. Obejmuje to podstawową składnię, sposób zwracania informacji o danych, które zostały przetworzone oraz jak dodawać lub usuwać wiele wierszy w jednej instrukcji.
Przeglądanie struktury tabeli
Przed użyciem INSERT
polecenie, musisz znać strukturę tabeli, aby móc dostosować się do wymagań nałożonych przez kolumny tabeli, typy danych i ograniczenia. W zależności od klienta bazy danych można to zrobić na kilka różnych sposobów.
Jeśli używasz psql
klienta wiersza poleceń, najprostszym sposobem na znalezienie tych informacji jest użycie \d+
metapolecenie wbudowane w narzędzie.
Na przykład, aby znaleźć strukturę tabeli o nazwie employee
, należy wpisać to:
\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
Dane wyjściowe wyświetlają między innymi nazwy kolumn tabeli, typy danych i wartości domyślne.
\d+
polecenie meta jest dostępne tylko z psql
klienta, więc jeśli używasz innego klienta, może być konieczne bezpośrednie zapytanie o informacje z tabeli. Większość istotnych informacji można uzyskać za pomocą zapytania takiego:
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)
Powinny one dać ci dobre pojęcie o strukturze tabeli, tak abyś mógł prawidłowo wstawiać wartości.
Korzystanie z INSERT
dodawać nowe rekordy do tabel
SQL INSERT
Polecenie służy do dodawania wierszy danych do istniejącej tabeli. Znając strukturę tabeli, możesz skonstruować polecenie, które dopasuje kolumny tabeli do odpowiednich wartości, które chcesz wstawić do nowego rekordu.
Podstawowa składnia polecenia wygląda tak:
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');
Kolumny na liście kolumn odpowiadają bezpośrednio wartościom podanym na liście wartości.
Domyślnie INSERT
polecenie zwraca identyfikator obiektu (zwykle 0) i liczbę wierszy, które zostały pomyślnie wstawione:
INSERT 0 1
Jako przykład, aby wstawić nowego pracownika do employee
tabeli wymienionej powyżej, możemy wpisać:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1
Tutaj podajemy wartości dla first_name
i last_name
kolumny, pozostawiając pozostałe kolumny do wypełnienia ich wartościami domyślnymi. Jeśli wyślesz zapytanie do tabeli, zobaczysz, że nowy rekord został dodany:
SELECT * FROM employee;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)
Zwracanie danych z INSERT
oświadczenia
Jeśli potrzebujesz dodatkowych informacji o danych, które zostały dodane do tabeli, możesz dołączyć RETURNING
klauzulę na końcu oświadczenia. RETURNING
klauzula określa kolumny do wyświetlenia rekordów, które właśnie zostały wstawione.
Na przykład, aby wyświetlić wszystkie kolumny dla właśnie wstawionych rekordów, możesz wpisać coś takiego:
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
Korzystanie z employee
tabeli, to wyglądałoby mniej więcej tak:
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
Możesz także zwrócić tylko określone kolumny z wstawek. Na przykład tutaj interesuje nas tylko identyfikator nowego pracownika:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
employee_id ------------- 3(1 row)INSERT 0 1
Jak zwykle, możesz również użyć aliasów kolumn, aby zmienić nazwy kolumn w danych wyjściowych:
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
Employee ID------------- 4(1 row)INSERT 0 1
Korzystanie z INSERT
dodać wiele wierszy naraz
Wstawianie rekordów pojedynczo jest bardziej czasochłonne i mniej wydajne niż wstawianie wielu wierszy naraz. PostgreSQL pozwala na określenie wielu wierszy do dodania do tej samej tabeli. Każdy nowy wiersz jest ujęty w nawiasy, przy czym każdy zestaw nawiasów jest oddzielony przecinkami.
Podstawowa składnia wstawiania wielu rekordów wygląda tak:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2'), ('value3', 'value4'), ('value5', 'value6');
Dla employee
tabeli, do której się odwołujemy, możesz dodać czterech nowych pracowników w jednym zestawieniu, wpisując:
INSERT INTO employee(first_name, last_name)VALUES ('Abigail', 'Spencer'), ('Tamal', 'Wayne'), ('Katie', 'Singh'), ('Felipe', 'Espinosa');
INSERT 0 4
Korzystanie z DELETE
usunąć wiersze z tabel
SQL DELETE
Polecenie służy do usuwania wierszy z tabel, funkcjonując jako akcja uzupełniająca INSERT
. Aby usunąć wiersze z tabeli, musisz zidentyfikować wiersze, na które chcesz kierować reklamy, podając kryteria dopasowania w WHERE
klauzula.
Podstawowa składnia wygląda tak:
DELETE FROM my_tableWHERE <condition>;
Na przykład do każdego wiersza w naszym employee
tabela, która ma swoje first_name
ustaw na Abigail
, możemy wpisać to:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1
Zwracana tutaj wartość wskazuje, że DELETE
polecenie zostało przetworzone z usuniętym jednym wierszem.
Zwracanie danych z DELETE
oświadczenia
Podobnie jak w przypadku INSERT
polecenie, możesz zwrócić zmienione wiersze lub określone kolumny z usuniętych wierszy, dodając RETURNING
klauzula:
DELETE FROM my_tableWHERE <condition>RETURNING *;
Na przykład możemy sprawdzić, czy poprawny rekord został usunięty, zwracając wszystkie kolumny od usuniętego employee
tutaj:
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
Korzystanie z DELETE
usunąć wiele wierszy naraz
Możesz usunąć wiele elementów jednocześnie za pomocą DELETE
manipulując kryteriami wyboru określonymi w WHERE
klauzula.
Na przykład, aby usunąć wiele wierszy według identyfikatora, możesz wpisać coś takiego:
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
Możesz nawet pominąć WHERE
klauzula usuwająca wszystkie wiersze z danej tabeli:
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
Należy jednak pamiętać, że użycie DELETE
opróżnienie tabeli danych nie jest tak wydajne jak TRUNCATE
polecenie, które może usunąć dane bez skanowania tabeli.
Wniosek
W tym artykule przedstawiliśmy niektóre z najważniejszych poleceń kontrolujących, jakie dane znajdują się w twoich tabelach PostgreSQL. INSERT
Polecenie może służyć do dodawania nowych danych do tabel, natomiast polecenie DELETE
polecenie określa, które wiersze mają zostać usunięte. Oba polecenia są w stanie zwrócić wiersze, na które wpływają, i mogą działać na wielu wierszach naraz.
Te dwa polecenia są podstawowymi mechanizmami używanymi do zarządzania zwiększaniem lub zmniejszaniem liczby rekordów zawartych w tabeli. Zapoznanie się z ich podstawową składnią, a także ze sposobami łączenia ich z innymi klauzulami, pozwoli w razie potrzeby wypełnić i wyczyścić tabele.