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)