Online Suche im Handbuch |
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 - IndexfileAnmerkung: 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.
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
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.
Online Suche im Handbuch |