====== Daten in eine Tabelle hochladen ====== 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. ===== INSERT INTO ==== 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 [[dbs:sql:example:createstaff|hier]]. ====== Ziel dieser Lektion ====== Du solltest nun in der Lage sein, eine Tabelle mit Daten zu versorgen. In der [[select|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.