Benutzer-Werkzeuge

Webseiten-Werkzeuge


computer:tutorials:sql:create_table

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

computer:tutorials:sql:create_table [2011/03/01 19:39] – angelegt christiancomputer: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:
 +
 <code> <code>
-CREATE TABLE KUNDEN (KND_Nr int PRIMARY KEY AUTO_INCREMENT, KND_Vorname char(50) NOT NULL, +CREATE TABLE [IF NOT EXISTS] <Tabellen-Name> (Feld1, Feld2, Feld3,...);
-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));+
 </code> </code>
  
 +  * **IF NOT EXISTS** ist hier optional - fehlt diese Option, meldet der **CREATE TABLE**-Befehl einen Fehler, falls die zu erstellende Tabelle bereits vorhanden ist.
 +  * **<Tabellen-Name>** 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:
 <code> <code>
-CREATE TABLE ARTIKEL (ART_Nr int PRIMARY KEY AUTO_INCREMENT, ART_Bezeichnung char(30) NOT NULL, +<Name> <Datentyp> [OPTIONEN]
-ART_Details char(50) NOT NULL, ART_Auslauf bool NULL, ART_StckPreis float NOT NULL);+
 </code> </code>
 +  * **<Name>>** steht für den Namen des zu erstellenden Felds, beispielsweise **Kunde_Name**
 +  * **<Datentyp>** 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:
 <code> <code>
-CREATE TABLE BESTELLUNGEN (BST_Nr int PRIMARY KEY AUTO_INCREMENT, KND_Nr int NOT NULL,  +CREATE TABLE telefonbuch (name text, telefonnummer text);
-BST_Datum date NOT NULL, BST_Bezahlt bool);+
 </code> </code>
  
 +=====Einfache Tabelle mit NOT NULL=====
 +In der bisherigen Tabelle lassen sich leere Eintragungen vornehmen:
 <code> <code>
-CREATE TABLE BESTELL_POS (BPOS_Nr int PRIMARY KEY AUTO_INCREMENT, BST_Nr int NOT NULL, +mysql> INSERT INTO telefonbuch (name, telefonnummer) VALUES (NULL, NULL); 
-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          | 
 ++----------------+---------------+
 </code> </code>
  
 +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:
 +<code>
 +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)
 +</code>
 +
 +=====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,..//).
 +
 +<code>
 +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)
 +</code>
computer/tutorials/sql/create_table.txt · Zuletzt geändert: von christian