Tabellen werden mithilfe des CREATE TABLE-Befehls angelegt. Dieser Befehl definiert neben dem Tabellennamen auch die Felderstruktur.
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:
Option | Beschreibung |
---|---|
NULL | Feld muss nicht ausgefüllt werden (Standard) |
NOT NULL | Feld muss ausgefüllt werden |
PRIMARY KEY | Feld ist Primärschlüssel |
AUTO_INCREMENT | Primärschlüssel wird automatisch hochgezählt |
DEFAULT | Standardmäßig zuzuweisender Wert, falls nicht anders angegeben. Beispiel: DEFAULT 1337 |
COMMENT | Kommentar 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„ |
); |
Die folgende Tabelle dient als einfaches Beispiel - in ihr werden Namen und Telefonnumern gespeichert.
telefonbuch | ||
---|---|---|
(PK)id | name | telefonnummer |
… | … | … |
Erstellung einer einfachen Tabelle ohne Primärschlüssel:
CREATE TABLE telefonbuch (name text, telefonnummer text);
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)
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)