Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| computer:tutorials:sql:create_table [2011/03/01 19:39] – angelegt christian | computer:tutorials:sql:create_table [2013/05/15 10:16] (aktuell) – christian | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | 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 KUNDEN (KND_Nr int PRIMARY KEY AUTO_INCREMENT, | + | CREATE TABLE [IF NOT EXISTS] < |
| - | KND_Nachname char(50) NOT NULL, KND_Firma char(50) NOT NULL, KND_Strasse char(50) NOT NULL, | + | |
| - | KND_PLZ char(5) NOT NULL, KND_Ort char(30) NOT NULL, KND_Notiz char(50)); | + | |
| </ | </ | ||
| + | * **IF NOT EXISTS** ist hier optional - fehlt diese Option, meldet der **CREATE TABLE**-Befehl einen Fehler, falls die zu erstellende Tabelle bereits vorhanden ist. | ||
| + | * **< | ||
| + | |||
| + | Die zu definierenden Felder werden nach dem Tabellen-Namen in runden Klammern aufgelistet. Jede Definition besteht aus mindestens zwei Feldern: | ||
| < | < | ||
| - | CREATE TABLE ARTIKEL (ART_Nr int PRIMARY KEY AUTO_INCREMENT, | + | < |
| - | ART_Details char(50) NOT NULL, ART_Auslauf bool NULL, ART_StckPreis float NOT NULL); | + | |
| </ | </ | ||
| + | * **< | ||
| + | * **< | ||
| + | Einige verfügbare Optionen: | ||
| + | ^Option^Beschreibung^ | ||
| + | |NULL|Feld muss nicht ausgefüllt werden (// | ||
| + | |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: '' | ||
| + | |COMMENT|Kommentar zur Beschreibung der Spalte, lässt sich mit " | ||
| + | |||
| + | Die Optionen lassen sich durch ein Leerzeichen getrennt kombinieren - beispielsweise '' | ||
| + | |||
| + | Beispiel: | ||
| + | |'' | ||
| + | |'' | ||
| + | |'' | ||
| + | |'' | ||
| + | |'' | ||
| + | ======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 BESTELLUNGEN | + | CREATE TABLE telefonbuch |
| - | BST_Datum date NOT NULL, BST_Bezahlt bool); | + | |
| </ | </ | ||
| + | =====Einfache Tabelle mit NOT NULL===== | ||
| + | In der bisherigen Tabelle lassen sich leere Eintragungen vornehmen: | ||
| < | < | ||
| - | CREATE TABLE BESTELL_POS | + | mysql> INSERT INTO telefonbuch |
| - | ART_Nr int NOT NULL, BPOS_Anzahl int NOT NULL, BPOS_Einzelpreis float NOT 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 ' | ||
| + | |||
| + | mysql> insert into telefonbuch (name, telefonnummer) VALUES ("Max Mustermann", | ||
| + | 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 (// | ||
| + | |||
| + | 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 (// | ||
| + | |||
| + | < | ||
| + | mysql> CREATE TABLE telefonbuch (id int PRIMARY KEY AUTO_INCREMENT, | ||
| + | Query OK, 0 rows affected (0.00 sec) | ||
| + | |||
| + | mysql> insert into telefonbuch (name, telefonnummer) VALUES ("Max Mustermann", | ||
| + | Query OK, 1 row affected (0.00 sec) | ||
| + | |||
| + | mysql> insert into telefonbuch (name, telefonnummer, | ||
| + | Query OK, 1 row affected (0.00 sec) | ||
| + | |||
| + | mysql> SELECT * FROM telefonbuch; | ||
| + | +----+----------------+---------------+-------+ | ||
| + | | id | name | telefonnummer | notiz | | ||
| + | +----+----------------+---------------+-------+ | ||
| + | | 1 | Max Mustermann | 0815/ | ||
| + | | 2 | Maxima Mustre | ||
| + | +----+----------------+---------------+-------+ | ||
| + | 2 rows in set (0.00 sec) | ||
| + | </ | ||