Inhaltsverzeichnis

Tabellen werden mithilfe des CREATE TABLE-Befehls angelegt. Dieser Befehl definiert neben dem Tabellennamen auch die Felderstruktur.

Syntax

Der Syntax lautet wie folgt:

CREATE TABLE [IF NOT EXISTS] <Tabellen-Name> (Feld1, Feld2, Feld3,...);

Die zu definierenden Felder werden nach dem Tabellen-Namen in runden Klammern aufgelistet. Jede Definition besteht aus mindestens zwei Feldern:

<Name> <Datentyp> [OPTIONEN]

Einige verfügbare Optionen:

OptionBeschreibung
NULLFeld muss nicht ausgefüllt werden (Standard)
NOT NULLFeld muss ausgefüllt werden
PRIMARY KEYFeld ist Primärschlüssel
AUTO_INCREMENTPrimärschlüssel wird automatisch hochgezählt
DEFAULTStandardmäßig zuzuweisender Wert, falls nicht anders angegeben. Beispiel: DEFAULT 1337
COMMENTKommentar zur Beschreibung der Spalte, lässt sich mit „SHOW FULL COLUMNS FROM“ anzeigen.

Die Optionen lassen sich durch ein Leerzeichen getrennt kombinieren - beispielsweise PRIMARY KEY AUTO_INCREMENT COMMENT „Key“.

Beispiel:

CREATE TABLE foo (Tabellenname „foo
id INT PRIMARY KEY AUTO_INCREMENT,Ganzzahl „id“ als Primärschlüssel, automatisch hochzählen
kommentar TEXT NOT NULL COMMENT „Textfeld“,Optionales Feld „kommentar“, mit Kommentar “Textfeld
nummer INT DEFAULT 1337 COMMENT „Ganzzahl“Ganzzahl „nummer“, Standardwert 1337, kit Kommentar “Ganzzahl
);

Beispiel

Die folgende Tabelle dient als einfaches Beispiel - in ihr werden Namen und Telefonnumern gespeichert.

telefonbuch
(PK)idnametelefonnummer

Einfache Tabelle

Erstellung einer einfachen Tabelle ohne Primärschlüssel:

CREATE TABLE telefonbuch (name text, telefonnummer text);

Einfache Tabelle mit NOT NULL

In der bisherigen Tabelle lassen sich leere Eintragungen vornehmen:

mysql> INSERT INTO telefonbuch (name, telefonnummer) VALUES (NULL, NULL);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM telefonbuch;
+----------------+---------------+
| name           | telefonnummer |
+----------------+---------------+
| NULL           | NULL          |
+----------------+---------------+

Mithilfe des Schlagworts NOT NULL, welches den beiden Feldern text und telefonnummer übergeben wird, kann das verhindert werden - leere Eintragungen sind dann nicht mehr möglich:

mysql> DROP TABLE telefonbuch
mysql> CREATE TABLE telefonbuch (name text NOT NULL, telefonnummer text NOT NULL);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into telefonbuch (name, telefonnummer) VALUES (NULL, NULL);
ERROR 1048 (23000): Column 'name' cannot be null

mysql> insert into telefonbuch (name, telefonnummer) VALUES ("Max Mustermann", "0815/1337666");
Query OK, 1 row affected (0.00 sec)

Tabelle mit Primärschlüssel und AUTO_INCREMENT

Bisher verwendet die Tabelle keinen Primärschlüssel - es gibt also keinen einzigartigen Identifikator für die einzelnen Datensätze. Mithilfe des Schlagworts PRIMARY KEY wird ein Feld (idealerweise eine Ganzzahl; int) zum Primärschlüssel definiert. Jeder Datensatz muss daraufhin einen einzigartigen Primärschlüssel haben.

Standardmäßig muss der Primärschlüssel für jeden Eintrag manuell definiert werden. Mithilfe des Schlagworts AUTO_INCREMENT lässt sich eine automatische Hochzählung der Einträge bewerkstelligen - wenn der Primärschlüssel als AUTO_INCREMENT definiert wird, wird er automatisch hochgezählt (1,2,3,..).

mysql> CREATE TABLE telefonbuch (id int PRIMARY KEY AUTO_INCREMENT, name text NOT NULL, telefonnummer text NOT NULL, notiz text NULL);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into telefonbuch (name, telefonnummer) VALUES ("Max Mustermann", "0815/1337666");
Query OK, 1 row affected (0.00 sec)

mysql> insert into telefonbuch (name, telefonnummer, notiz) VALUES ("Maxima Mustre", "0800/1338667", "Test");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM telefonbuch;
+----+----------------+---------------+-------+
| id | name           | telefonnummer | notiz |
+----+----------------+---------------+-------+
|  1 | Max Mustermann | 0815/1337666  | NULL  |
|  2 | Maxima Mustre  | 0800/1338667  | Test  |
+----+----------------+---------------+-------+
2 rows in set (0.00 sec)