Benutzer-Werkzeuge

Webseiten-Werkzeuge


computer:tutorials:sql:create_table

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

computer:tutorials:sql:create_table [2011/03/01 19:39]
christian angelegt
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:
 +
 <​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> ​(Feld1Feld2Feld3,...);
-KND_Nachname char(50) NOT NULLKND_Firma char(50) NOT NULLKND_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_INCREMENTKND_Nr int NOT NULL,  +CREATE TABLE telefonbuch ​(name texttelefonnummer 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_INCREMENTBST_Nr int NOT NULL, +mysql> INSERT INTO telefonbuch ​(nametelefonnummer) VALUES (NULL, NULL); 
-ART_Nr int NOT NULL, BPOS_Anzahl int NOT NULL, BPOS_Einzelpreis float NOT NULL);+Query OK1 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: 2013/05/15 10:16 von christian