PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man Daten in PostgreSQL einfügt und löscht


Einführung

Das Hinzufügen und Entfernen von Datensätzen aus Tabellen gehört zu den häufigsten Operationen, die Datenbanken ausführen. Das Hinzufügen von Daten umfasst die Angabe der Tabellen- und Spaltennamen, denen Sie Werte hinzufügen möchten, sowie der Werte, die Sie in die einzelnen Felder eingeben möchten. Das Löschen von Datensätzen beinhaltet das Identifizieren der richtigen Zeile oder Zeilen und deren Entfernung aus der Tabelle.

In dieser Anleitung behandeln wir die Verwendung von SQL INSERT und DELETE Befehle mit PostgreSQL. Dies umfasst die grundlegende Syntax, wie Dateninformationen über die verarbeiteten Daten zurückgegeben werden und wie mehrere Zeilen in einer einzigen Anweisung hinzugefügt oder entfernt werden.



Überprüfung der Tabellenstruktur

Vor der Verwendung von INSERT Befehl müssen Sie die Struktur der Tabelle kennen, damit Sie die Anforderungen berücksichtigen können, die durch die Spalten, Datentypen und Einschränkungen der Tabelle auferlegt werden. Abhängig von Ihrem Datenbank-Client gibt es dafür verschiedene Möglichkeiten.

Wenn Sie die Datei psql verwenden Befehlszeilenclient, der einfachste Weg, diese Informationen zu finden, ist die Verwendung von \d+ Meta-Befehl, der in das Tool integriert ist.

Zum Beispiel, um die Struktur einer Tabelle mit dem Namen employee zu finden , würden Sie Folgendes eingeben:

\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

Die Ausgabe zeigt unter anderem die Spaltennamen, Datentypen und Standardwerte der Tabelle an.

Der \d+ meta-Befehl ist nur mit psql verfügbar Wenn Sie also einen anderen Client verwenden, müssen Sie die Tabelleninformationen möglicherweise direkt abfragen. Die meisten relevanten Informationen erhalten Sie mit einer Abfrage wie dieser:

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)

Diese sollten Ihnen eine gute Vorstellung von der Struktur der Tabelle geben, damit Sie Werte korrekt einfügen können.



Verwendung von INSERT um neue Datensätze zu Tabellen hinzuzufügen

Das SQL INSERT Der Befehl wird verwendet, um Datenzeilen zu einer vorhandenen Tabelle hinzuzufügen. Sobald Sie die Struktur der Tabelle kennen, können Sie einen Befehl erstellen, der die Spalten der Tabelle mit den entsprechenden Werten abgleicht, die Sie für den neuen Datensatz einfügen möchten.

Die grundlegende Syntax des Befehls sieht folgendermaßen aus:

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

Die Spalten in der Spaltenliste entsprechen direkt den in der Werteliste bereitgestellten Werten.

Standardmäßig ist die INSERT Der Befehl gibt die Objekt-ID (normalerweise 0) und die Anzahl der Zeilen zurück, die erfolgreich eingefügt wurden:

INSERT 0 1

Als Beispiel, um einen neuen Mitarbeiter in den employee einzufügen In der oben aufgeführten Tabelle könnten wir Folgendes eingeben:

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

Hier geben wir Werte für first_name an und last_name Spalten, während die anderen Spalten mit ihren Standardwerten ausgefüllt werden. Wenn Sie die Tabelle abfragen, können Sie sehen, dass der neue Datensatz hinzugefügt wurde:

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


Rückgabe von Daten aus INSERT Aussagen

Wenn Sie zusätzliche Informationen zu den Daten wünschen, die der Tabelle hinzugefügt wurden, können Sie den RETURNING einfügen Klausel am Ende Ihrer Erklärung. Der RETURNING -Klausel gibt die anzuzeigenden Spalten der gerade eingefügten Datensätze an.

Um beispielsweise alle Spalten für die gerade eingefügten Datensätze anzuzeigen, könnten Sie Folgendes eingeben:

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

Mit dem employee Tabelle, würde dies etwa so aussehen:

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

Sie können auch auswählen, nur bestimmte Spalten von Einfügungen zurückzugeben. Hier interessiert uns beispielsweise nur die ID des neuen Mitarbeiters:

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

Wie üblich können Sie auch Spaltenaliase verwenden, um die Spaltennamen in der Ausgabe zu ändern:

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


Verwendung von INSERT um mehrere Zeilen gleichzeitig hinzuzufügen

Das Einfügen von Datensätzen nacheinander ist zeitaufwändiger und weniger effizient als das Einfügen mehrerer Zeilen auf einmal. Mit PostgreSQL können Sie mehrere Zeilen angeben, die derselben Tabelle hinzugefügt werden sollen. Jede neue Zeile wird in Klammern eingeschlossen, wobei jeder Satz Klammern durch Kommas getrennt wird.

Die grundlegende Syntax für das Einfügen mehrerer Datensätze sieht folgendermaßen aus:

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

Für den employee Tabelle, auf die wir uns beziehen, können Sie vier neue Mitarbeiter in einer einzigen Anweisung hinzufügen, indem Sie Folgendes eingeben:

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


Mit DELETE um Zeilen aus Tabellen zu entfernen

Das SQL DELETE Der Befehl wird verwendet, um Zeilen aus Tabellen zu entfernen, und fungiert als ergänzende Aktion zu INSERT . Um Zeilen aus einer Tabelle zu entfernen, müssen Sie die Zeilen identifizieren, auf die Sie abzielen möchten, indem Sie Übereinstimmungskriterien innerhalb eines WHERE angeben Klausel.

Die grundlegende Syntax sieht folgendermaßen aus:

DELETE FROM my_tableWHERE <condition>;

Zum Beispiel zu jeder Zeile in unserem employee Tabelle, die ihren first_name hat auf Abigail gesetzt , könnten wir Folgendes eingeben:

DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1

Der Rückgabewert gibt hier an, dass der DELETE Befehl wurde verarbeitet, wobei eine einzelne Zeile entfernt wurde.



Rückgabe von Daten aus DELETE Aussagen

Wie beim INSERT Befehl können Sie die betroffenen Zeilen oder bestimmte Spalten aus den gelöschten Zeilen zurückgeben, indem Sie ein RETURNING hinzufügen Klausel:

DELETE FROM my_tableWHERE <condition>RETURNING *;

Beispielsweise können wir überprüfen, ob der richtige Datensatz entfernt wurde, indem wir alle Spalten des gelöschten employee zurückgeben 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


Verwendung von DELETE um mehrere Zeilen auf einmal zu entfernen

Mit DELETE können Sie mehrere Elemente auf einmal entfernen durch Manipulation der im WHERE angegebenen Auswahlkriterien Klausel.

Um beispielsweise mehrere Zeilen nach ID zu entfernen, könnten Sie Folgendes eingeben:

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

Sie können sogar das WHERE weglassen -Klausel, um alle Zeilen aus einer bestimmten Tabelle zu entfernen:

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

Beachten Sie jedoch, dass die Verwendung von DELETE eine Datentabelle zu leeren ist nicht so effizient wie TRUNCATE Befehl, der Daten entfernen kann, ohne die Tabelle zu scannen.



Fazit

In diesem Artikel haben wir einige der wichtigsten Befehle vorgestellt, mit denen Sie steuern können, welche Daten sich in Ihren PostgreSQL-Tabellen befinden. Das INSERT Der Befehl kann verwendet werden, um neue Daten zu Tabellen hinzuzufügen, während der Befehl DELETE Befehl gibt an, welche Zeilen entfernt werden sollen. Beide Befehle sind in der Lage, die Zeilen zurückzugeben, die sie betreffen, und können mehrere Zeilen gleichzeitig bearbeiten.

Diese beiden Befehle sind die primären Mechanismen, die verwendet werden, um die Anzahl der Datensätze, die Ihre Tabelle enthält, zu erhöhen oder zu verringern. Wenn Sie ihre grundlegende Syntax sowie die Möglichkeiten, wie sie mit anderen Klauseln kombiniert werden können, in den Griff bekommen, können Sie Ihre Tabellen nach Bedarf füllen und bereinigen.