Zeilen einfügen (INSERT)
Nachdem wir bisher nur Informationen aus der Datenbank ausgelesen haben, wird es auch mal Zeit, Informationen in die Datenbank einzutragen.
Dafür verwenden wir die "INSERT
"-Klausel.
Vorwissen
Bevor wir einfach neue Daten in eine Tabelle eintragen, müssen wir noch ein paar wichtige Aspekte betrachten.
Primärschlüssel
Jede Tabelle benötigt einen Primärschlüssel, um die Zeilen innerhalb der Tabelle eindeutig identifizieren zu können. Angenommen, wir haben eine Tabelle für Fahrzeuge, bei denen doppelte Einträge vorkommen können. Das Auto von der Marke XYZ steht in der Farbe Grau gleich 2-mal in der Tabelle. Ohne den Primärschlüssel könnte die Datenbank oder derjenige, der die Informationen auslesen soll, die beiden Einträge nicht voneinander unterscheiden. Sicherlich gibt es hier noch die Möglichkeiten über Fahrzeugschlüsselnummer oder andere Spezifikationen, die beiden Fahrzeuge voneinander zu unterscheiden. Aber die Datenbank verwendet dafür den eindeutigen Primärschlüssel, der innerhalb einer Tabelle nur einmal vorkommen darf.
In der Tabelle "person" haben wir die Spalte "person_id", die für uns den Primärschlüssel darstellt. Darin sind die Zahlen, beginnend mit der 1, in aufsteigender Reihenfolge angegeben.
Wenn die logische Reihenfolge der Spalte "person_id" fortgesetzt werden soll, dann bekommt der nächste Eintrag die Nummer 14. Das wäre schön für das Auge, aber völlig uninteressant für die Datenbank. Auch wenn der Wert "Vierzehn" oder "1und4" heißen würde, wäre das eine gültige Angabe. Es dürfen nur keine doppelten Einträge erzeugt werden.
Zeichenanzahl
Eingabefelder, die für Texteingaben verwendet werden, unterliegen einem Limit an Zeichen, die darin eingetragen und gespeichert werden können. Dieses Limit wird normalerweise beim Erstellen der Tabelle für die einzelnen Spalten bestimmt. Bei der Tabelle person wurde das Limit für Zeichen in Textfeldern wie folgt gesetzt:
- person_id = 11
- anrede = 20
- vorname = 50
- nachname = 50
- familienstand = 20
Die Limitangabe hat etwas mit der Speicherbelegung zu tun. Bei einem Textfeld, wo die Eingabe von 50 Zeichen möglich ist, der eingetragene Wert aber nur 20 Zeichen hat, wird der restliche Freiraum (30) Zeichen mit Leerzeichen aufgefüllt. So ist das Textfeld immer mit 50 Zeichen belegt, die gespeichert werden. Allerdings wirkt sich das in einer Tabelle mit Millionen von Einträgen wie bei dem Telefonbuch auch auf dem Speicher und der Performance aus.
INSERT
Kommen wir nun zu der "INSERT
"-Anweisung.
Das Schlüsselwort "INSERT
" sagt der Datenbank, dass wir einen Eintrag erstellen wollen.
Mit dem darauffolgenden Schlüsselwort "INTO
" und dem darauffolgenden Tabellenname sagen wir der Datenbank, in welcher Tabelle wir den Eintrag erstellen wollen.
Direkt nach dem Tabellennamen übermitteln wir innerhalb von runden Klammern, für welche Spalten die Informationen sind.
Nun fehlen nur noch die Informationen, die in der Datenbank hinterlegt werden sollen.
Dazu verwenden wir das Schlüsselwort "VALUES
", hinter dem wir wieder innerhalb von runden Klammern und mit einem Komma voneinander getrennt die Informationen angegeben.
INSERT INTO person (person_id,anrede,vorname,nachname,geburtsdatum,familienstand,hochzeitsdatum) VALUES (14,'Herr','Heiko','Brommer','1985-01-22','Verheiratet','2017-05-20');
Der neue Datensatz sollte nun in der Tabelle als Zeile 14 angezeigt werden.
Praxis
Die einzelne Anweisung funktioniert innerhalb von phpMyAdmin unter dem Reiter SQL, aber auch innerhalb von Programmen. Hier ein Beispiel in PHP:
if ($db = mysqli_connect("localhost", "root", "", "training")) {
$erstellen = "INSERT INTO person (person_id,anrede,vorname,nachname,geburtsdatum,familienstand,hochzeitsdatum) VALUES (14,'Herr','Heiko','Brommer','1985-01-22','Verheiratet','2017-05-20')";
if (mysqli_query($db, $erstellen)) {
echo "Neuer Datensatz wurde erstellt.";
} else {
echo "Fehler: " . $erstellen . "<br>" . mysqli_error($db);
}
}
mysqli_close($db);
Als kleine Kontrolle können wir uns den frisch erzeugten Datensatz auch wieder ausgeben lassen.
SELECT vorname, nachname, geburtsdatum FROM person WHERE person_id=14;
Weiter mit Zeilen ändern (UPDATE)