Seitenleiste

Community

SQL

Grundlagen

Datenbanksysteme

Client/Server

Eingebettet

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 hier.

Ziel dieser Lektion

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.