Weiter Zurück [Inhalt] Online Suche im Handbuch

28.1 CREATE TABLE

CREATE TABLE

CREATE TABLE tbl_name (create_definition,...) 

create_definition:
  col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
            [PRIMARY KEY] [reference_definition]
  oder  PRIMARY KEY (index_col_name,...)
  oder  KEY [index_name] KEY(index_col_name,...)
  oder  INDEX [index_name] (index_col_name,...)
  oder  UNIQUE [index_name] (index_col_name,...)
  oder  [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
            [reference_definition]
  oder  CHECK (expr)

Typ:
        TINYINT[(length)] [UNSIGNED] [ZEROFILL]
  oder  SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
  oder  MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
  oder  INT[(length)] [UNSIGNED] [ZEROFILL]
  oder  INTEGER[(length)] [UNSIGNED] [ZEROFILL]
  oder  BIGINT[(length)] [UNSIGNED] [ZEROFILL]
  oder  REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
  oder  DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
  oder  FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
  oder  DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
  oder  NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
  oder  CHAR(length) [BINARY]
  oder  VARCHAR(length) [BINARY]
  oder  DATE
  oder  TIME
  oder  TIMESTAMP
  oder  DATETIME
  oder  TINYBLOB
  oder  BLOB
  oder  MEDIUMBLOB
  oder  LONGBLOB
  oder  TINYTEXT
  oder  TEXT
  oder  MEDIUMTEXT
  oder  LONGTEXT
  oder  ENUM(value1,value2,value3...)
  oder  SET(value1,value2,value3...)

index_col_name:
        col_name [(length)]

reference_definition:
        REFERENCES tbl_name [(index_col_name,...)]
                   [MATCH FULL | MATCH PARTIAL]
                   [ON DELETE reference_option]
                   [ON UPDATE reference_option]

reference_option:
        RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

table_options:
        type = [ISAM | MYISAM | HEAP]
oder      auto_increment = #
oder      avg_row_length = #
oder      checksum = [0 | 1]
oder      comment = "string"
oder      max_rows = #
oder      min_rows = #
oder      pack_keys = [0 | 1]
oder      password= "string"

select_statement:
        [ | IGNORE | REPLACE] SELECT ...  (Hier kann irgendein SELECT Statement eingefügt werden)
CREATE TABLE erstellt eine neue Tabelle in der aktuellen Datenbank (Datenbank kann mittels USE db_name ausgewählt werden).

Jede Tabelle wird durch drei Dateien im Datenbankverzeichnis dargestellt:

  
     tbl_name.frm - Tabellendefinition 
     tbl_name.ISD - Datenfile 
     tbl_name.ISM - Indexfile 
Anmerkung: ab MySQL 3.22 kann der Tabellenname mittels db_name.tbl_name angegeben werden.

Was hat es mit den drei Dateien auf sich ? In der Tabellendefinition befindet sich die Struktur der Datenbank, die Angaben über die Größen der Felder u.s.w. Im Datenfile befinden sich alle Daten, die dort so abgelegt sind, daß die schnell wiedergefunden werden können. Im Indexfile ist die Datenbank als HASH-Tabelle abgelegt, welches die Suche im Datenfile drastisch beschleunigt.

Zur Syntax von CREATE

Der CREATE Befehl ist besonders wichtig, da ohne eine solide Datenbankstruktur nichts korrekt läuft. Man sollte sich gut überlegen, welche Typen und Attribute man verwendet, sowie man die Datenbank am geschicktesten anlegt. Spätere Korrekturen sind schlecht möglich. Bevor man nun einfach eine Datenbank erzeugt, sollte man das Kapitel Datenbank Grundlagen und das Kapitel zur Normalisierug von Datenbanken

Die Optionen table_options und einige SELECT Optionen gibt es erst ab der MySQL Version 3.23. Hier wurden folgende Typen hinzugefügt: Hier gibt es noch ein paar Optionen, die nur in Tabellen mit der neuen, MyISAM Struktur funktionieren:

Beispiele zu CREATE und ALTER

Hier sind einige Beispiele die zeigen, wie man mit CREATE und ALTER TABLE umgeht:

mysql> CREATE TABLE test (a int not null auto_increment, primary key (a), key(b))
     TYPE=HEAP SELECT b,c from test2;

Dieses Beispiel legt eine temporäre HEAP Tabelle mit 3 Spalten an. Diese HEAP Tabelle wird vollständig im RAM abgelegt. Eventuell werden Teile auch im SWAP - File ausgelagert (erst ab Version 3.23). Die Tabelle kann nachher wieder gelöscht werden. Falls ein Fehler auftritt, dann wird diese Tabelle automatisch gelöscht.


mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));

Um Tabelle von t1 nach t2 umzubenennen:


mysql> ALTER TABLE t1 RENAME t2;

Um eine Spalte von INTEGER nach TINYINT NOT NULL zu konvertieren, und gleichzeitig Spalte b von CHAR(10) nach CHAR(20) unter Umbenennung von b nach c zu verändern:


mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);

Einfügen einer TIMESTAMP Spalte mit Namen d:

mysql> ALTER TABLE t2 ADD d TIMESTAMP;

Um einen Index an Spalte d anzufügen, und diese als primary key zu bestimmen:

mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

Spalte c Löschen:

mysql> ALTER TABLE t2 DROP COLUMN c;

Hinzufügen einer AUTO_INCREMENT integer Spalte namens c:

mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
           ADD INDEX (c);

Man beachte, daß wir c indiziert haben, weil AUTO_INCREMENT Spalten zwangsläufig indiziert werden müssen. Wir erklären c als NOT NULL, weil indizierte Spalten nicht NULL sein dürfen.


Weiter Zurück [Inhalt] Online Suche im Handbuch