Home
SQL / MySQL
Datenbanken?
  ---------------
Select
Insert
Update
Delete
  ---------------
Where
Order By
Group By
  ---------------
Create Table
Alter Table
Rename Table
Drop Table
Optimize Table
Repair Table
Backup Table
Restore Table
Show Tables
Describe Table
  ---------------
Use DB
Create DB
Drop DB
Show DBs
  ---------------
Funktionen
Indizes
Fulltext
Feldtypen
Gästebuch
Download
Kontakt
 
57950 Seitenaufrufe

Insert - Statement


  1. Einen Datensatz in eine Tabelle einspielen
  2. Mehrere Datensätze auf einmal in eine Tabelle einspielen
  3. Fehler bei doppelten Werten vermeiden (INSERT IGNORE INTO...)
  4. Daten aus einer bereits bestehenden Tabelle in eine andere Tabelle übernehmen
  5. Daten aus einer CSV-Datei in eine Tabelle übernehmen


Bedeutung:
Mit der INSERT-Anweisung lassen sich neue Datesätze in eine Tabelle einspielen.


Allgemeine Form:

a) Kurzform
INSERT INTO tabelle ('wert1', 'wert2', 'wert3', 'wert4')


b) Vollständige Form
INSERT INTO tabelle
(feld1, feld2, feld3, feld4)
VALUES
('wert1', 'wert2', 'wert3', 'wert4')


Bei der Kurzform muss die Anzahl der Werte genau der Anzahl der Felder in der Tabelle entsprechen. Die Werte werden in der Reihenfolge der in der Tabelle vorkommenden Felder in die Tabelle eingespielt. Um Fehler zu vermeiden sollte man hier immer auf die vollständige Form der INSERT-Anweisung zurückgreifen.


Einen Datensatz in eine Tabelle einspielen
Beispiel:
In folgende Tabellenstruktur soll ein Datensatzeingefügt werden. Das Feld id ist ein INTEGER-Feld, das eine eindeutige Nummer - die automatisch von MySQL vergeben wird (Autoincrement) - für jeden Datensatz enthält.

id anrede vorname nachname strasse ort
1 Herr Ludwig Laberbacke Laberstrasse 11 Lordhausen
2 Frau Paula Tratschig Sonnenstraße 56 Augustburg
3 Frau Petra Timmers Feldweg 1 Langenort
           

Die Verwendung der folgenden Kurzform wird hier fehlschlagen:
INSERT INTO adressen
('Herr', 'Klaus', 'Becker', 'Feldweg 1', 'Berlin')

Grund: Der Wert für das Feld id ist in der Werteliste nicht vorhanden. Die Anzahl der Werte stimmt nicht mit der Anzahl der Felder überein.

Aber auch wenn der Wert für das Feld id mit angegeben wird kann die INSERT-Anweisung fehlschlagen. Da man nicht immer sicher sein kann, welche Werte in der Spalte id bereits vergeben sind kann es passieren, daß man versucht einen in der Spalte bereits vergebenen Wert einzufügen. Dies führt zu einem Fehler und damit auch dazu, daß die Anweisung nicht ausgeführt wird.

Die vollständige Anweisung würde hier in jedem Fall eher zum Erfolg führen:

INSERT INTO adressen
('anrede', 'vorname', 'nachname', 'strasse', 'ort')
VALUES
('Herr', 'Klaus', 'Becker', 'Feldweg 1', 'Berlin')


Der Wert für das Feld id braucht hier nicht mit angegeben werden da klar ist welcher Wert in welches Feld eingespielt werden soll. MySQL würde automatisch einen DEFAULT-Wert für alle nicht im Statement genannten Felder mit einfügen, in diesem Fall also auch für das Feld id.


Mehrere Datensätze auf einmal in eine Tabelle einspielen
Hat man sehr viele Datensätze in eine Tabelle einzuspielen kann man sich einiges an Schreibarbeit sparen indem man einfach alle Wertelisten jeweils durch Komma getrennt hintereinander schreibt. Auch hier kann man entweder die Kurzfrm oder die vollständige Form verwenden.

a) Kurzform
INSERT INTO tabelle
('wert1', 'wert2', 'wert3', 'wert4'),
('wert1', 'wert2', 'wert3', 'wert4'),
('wert1', 'wert2', 'wert3', 'wert4')


b) Vollständige Form
INSERT INTO tabelle
(feld1, feld2, feld3, feld4)
VALUES
('wert1', 'wert2', 'wert3', 'wert4'),
('wert1', 'wert2', 'wert3', 'wert4'),
('wert1', 'wert2', 'wert3', 'wert4')


Hinweis:
"Multiple Inserts" werden wesentlich schneller abgearbeitet als einzelne Inserts (vorrausgesetzt die Anzahl der einzufügenden Datensätze ist gleich).


Fehler bei doppelten Werten vermeiden (INSERT IGNORE INTO...)
Wenn Daten in eine Tabelle mit eindeutigen Schlüsseln eingespielt werden kommt es zu Fehlern, wenn versucht wird einen bereits enthaltenen Wert erneut in die Tabelle bzw. Spalte einzufügen. Diese Fehler und damit den Abbruch der SQL-Anweisung kann man vemeiden wenn man im Statement IGNORE verwendet.

INSERT IGNORE INTO tabelle (...) VALUES (...)

Die einzufügende Zeile, die den Wert in einer Spalte verdoppeln würde, wird bei IGNORE verworfen. Dabei wird keine Fehlermeldung ausgegeben.


Daten aus einer bereits bestehenden Tabelle in eine andere Tabelle übernehmen
Mit dem folgenden Statement kann man MySQL anweisen, die Daten aus einer bereits bestehenden Tabelle in eine andere einzufügen. Voraussetzung dafür ist allerdings, daß die betroffenen Tabellen eine idetische Struktur besitzen.

INSERT INTO tabelleEins
SELECT * FROM tabelleZwei

Selbstverständlich kann man alle Möglichkeiten des SELECT-Statements wie z.B. die WHERE-Bedingung, die GROUP BY-Klausel oder auch ORDER BY hier auch nutzen:

INSERT INTO tabelleEins
SELECT * FROM tabelleZwei
WHERE feld1 = 'wert'



Daten aus einer CSV-Datei in eine Tabelle übernehmen
In MySQL gibt es die Möglichkeit, Daten aus einer CSV-Datei in eine bestehende Tabelle zu übernehmen. Jede Zeile in der CSV-Datei entspricht später einem Datensatz in der Tabelle.

LOAD DATA INFILE 'C:/temp/data.csv'
INTO TABLE tabelle
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

Wichtig:
Die Datenstruktur in der Datei muss der der Tabelle entsprechen (Anzahl der Werte pro Zeile muss der Anzahl der Felder in der Tabelle entsprechen).

Als Feldtrenner und als Zeilenbegrenzer sollte man solche Zeichen verwenden, die mit Sicherheit nicht in den Daten der Datei vorkommen. Ist 'ENCLOSED BY' angegeben, so nimmt MySQL an, dass die Daten in der Datei jeweils in das angegebene Begrenzungszeichen eingeschlossen sind. Die Angabe ist optional.

 
Letzte Änderung: 17. Mai 2002, 22:26 Uhr


© 2002, Klaus Becker, becker-k@web.de