Wir wissen nun, dass es einen Unterschied zwischen einer Datenbank und einer Tabelle gibt, ein Datenbank-Service mehrere Datenbanken halten kann und eine Datenbank mehrere Tabellen halten kann - ähnlich eines Computers (Servers), der mehrere Festplatten (Datenbanken) enthalten kann, jede Festplatte mehrere Verzeichnisse (Tabellen) haben kann und in jedem Verzeichnis mehrere Dateien (Datensätze) beinhalten kann.
Wenn wir also Daten einfügen möchten, müssen wir zuerst sagen, mit welchem Computer wir uns verbinden möchten und mit USE
die entsprechende Festplatte auswählen. Anschließend können wir sagen, in welches Verzeichnis wir Daten hinzufügen wollen.
Der entsprechende SQL-Befehl lautet INSERT INTO
. Er wird gefolgt von dem Namen der Tabelle und dem Schlüsselwort VALUES
, dem die Daten folgen.
INSERT INTO Staff VALUES ( 1, 30000.00, 'Boss', 'Bert', 'm', '2011-01-01' )
Die Eingaben werden in der Reihenfolge angegeben, in der die Spalte der Tabellen auftauchen.
Erweitern wir unser Skript und fügen unserer Firma etwas Personal hinzu.
/* Staff Skript proggen.org SQL-Tutorial */ # Datenbank leeren DROP DATABASE IF EXISTS proggenorg; CREATE DATABASE proggenorg; USE proggenorg; # Tabellen erstellen CREATE TABLE Staff ( Department SMALLINT UNSIGNED, Salary DECIMAL(7,2) NOT NULL, FamilyName CHAR(100), GivenName CHAR(100), Sex CHAR(1), DateOfJoining DATE ); # Personal eintragen INSERT INTO staff VALUES ( 1, 50000.00, 'Boss', 'Bert', 'm', '2010-01-01' ); INSERT INTO staff VALUES ( 2, 30000.00, 'Handel', 'Holger', 'm', '2010-06-01' ); INSERT INTO staff VALUES ( 3, 28000.00, 'Helfer', 'Herbert', 'm', '2010-08-01' ); INSERT INTO staff VALUES ( 4, 25000.00, 'Redseelig', 'Renate', 'f', '2011-01-01' ); INSERT INTO staff VALUES ( 2, 20000.00, 'Ramsch', 'Rainer', 'm', '2012-04-01' );
Nachdem wir das Skript mit \. createstaff.sql
ausgeführt haben, erhalten wir folgende Ausgabe:
mysql> \. createstaff.sql Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Database changed Query OK, 0 rows affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
Wir haben also daten in die Datenbank eingetragen und jeder INSERT INTO
Befehl hat eine Zeile verändert - nämlich hinzugefügt.
Wenn wir uns die Beschreibung der Tabelle mit DESCRIBE staff;
ansehen, erkennen wir, dass wir fast überall Default-Werte erlauben:
+---------------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+----------------------+------+-----+---------+-------+ | Department | smallint(5) unsigned | YES | | NULL | | | Salary | decimal(7,2) | NO | | NULL | | | FamilyName | char(100) | YES | | NULL | | | GivenName | char(100) | YES | | NULL | | | Sex | char(1) | YES | | NULL | | | DateOfJoining | date | YES | | NULL | | +---------------+----------------------+------+-----+---------+-------+ 7 rows in set (0.01 sec)
Diese können wir nutzen, wenn wir gar nicht alle Parameter angeben möchten. Bei sehr großen Tabellen kann es effizienter sein, nur die Parameter zu nennen, die man auch setzen möchte. Fügen wir nun noch „Arne Aushilfskraft“ hinzu, der keiner Abteilung zugehörig ist und kein festes Gehalt bekommt.
INSERT INTO staff( GivenName, FamilyName, Sex, DateOfJoining ) VALUES ( "Arne", "Aushilfskraft", "m", "2013-02-01" );
Hier kann ich die Reihenfolge auch nach belieben festlegen: Obwohl FamilyName in der Tabelle zuerst genannt wird, habe ich in diesem INSERT INTO
Befehl die Reihenfolge von FamilyName und GivenName vertauscht. Die Angabe der Spalten, die man beschreiben möchte, hilft also dabei, auch die richtigen Spalten zu treffen. Ein INSERT INTO
ohne Angaben ist eigentlich nur dann sinnvoll, wenn man die Tabelle im eigenen Skript gerade genauso angelegt hat.
Diesen SQL-Befehl fügen wir bitte auch in unser Skript ein, damit uns der arme Arne nicht für die nächsten Lektionen verloren geht. Anschließend führen wir sie zusätzlich in die Konsole aus oder führen das geänderte Skript erneut aus. Das fertige Skript gibt es hier.
Du solltest nun in der Lage sein, eine Tabelle mit Daten zu versorgen. In der kommenden Lektion werden wir versuchen, wieder an unsere Daten heran zu kommen und lernen einfache Fragen zu formulieren, um aus den reichlichen Daten interessante herauszufiltern.