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] (Feld1, Feld2, Feld3,...);
* **IF NOT EXISTS** ist hier optional - fehlt diese Option, meldet der **CREATE TABLE**-Befehl einen Fehler, falls die zu erstellende Tabelle bereits vorhanden ist.
* **** steht für den Name der zu erstellenden Tabelle
Die zu definierenden Felder werden nach dem Tabellen-Namen in runden Klammern aufgelistet. Jede Definition besteht aus mindestens zwei Feldern:
[OPTIONEN]
* **>** steht für den Namen des zu erstellenden Felds, beispielsweise **Kunde_Name**
* **** steht für den zu verwendenden [[datentypen|Datentyp]], beispielsweise **int**
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//"|
|'');''| |
======Beispiel======
Die folgende Tabelle dient als einfaches Beispiel - in ihr werden Namen und Telefonnumern gespeichert.
^telefonbuch^^^
^(PK)id^name^telefonnummer^
|...|...|...|
=====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)