Tabellen speichern Informationen.
Wie Sie aber die Tabellen erstellen, löschen und verändern, zeige ich
Ihnen in den folgenden Kapiteln
Es kommt gleich eine mordsmäßige Syntax-Definition. Bitte nicht
erschrecken! Der CREATE-Befehl ist mit Abstand der aufwändigste
Befehl, den MySQL zu bieten hat. Das ganze könnte nun
ein wenig"trocken" werden.
mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(erstellungs-definition,...)] [tabellen_optionen] [select_statement]
|
Erstellungs-Definition:
spaltenname datentyp [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] oder PRIMARY KEY (index_col_name,...) oder KEY [index_name] (index_col_name,...) oder INDEX [index_name] (index_col_name,...) oder UNIQUE [INDEX] [index_name] (index_col_name,...) oder FULLTEXT [INDEX] [index_name] (index_col_name,...) oder [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)[reference_definition] oder CHECK (expr)
|
index_col_name:
reference_definition:
REFERENCES tbl_name [(index_col_name,...)] [MATCH FULL | MATCH PARTIAL] [ON DELETE reverence_option] [ON UPDATE reverence_option]
|
reference_option:
RESTRICT | CASCADE | SET NULL | NO AKTION | SET DEFAULT
|
tabellen_optionen:
TYPE = {BDB | HEAP | ISAM | InnDB | MERGE | MRG_MYISAM | MYSISAM } 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 | DEFAULT} oder PASSWORD = "string" oder DELAY_KEY_WRITE = {0 | 1} oder ROW_FORMAT = { default | dynamic | fixed | compressed } oder RAID_TYPE = {1 | STRIPED | RAIDO} RAID_CHUNKS=# RAID_CHUNKSIZE=# oder UNION = {table_name.[table_name...]) oder INSERT_METHOD = { NO | FIRST | LAST } oder DATA DIRECTORY="directory" oder INDEX DIRECTORY="directory"
select_statement: [INGORE | REPLACE] SELECT ... (Irgendein korrektes SELECT-Kommando ist zulässig)
|
|
Als kleines Beispiel für ich Ihnen vor, wie Sie eine Adressentabelle
erstellen können.
Folgende Anforderungen soll diese mindestens erfüllen:
-
Es gibt eine Kundennummer die als Primärschlüssel definiert wird.
Die Datenbank soll maximal 100 Kunden aufnehmen und automatisch
mittels des Primärschlüssels hochgezählt werden.
Es gibt keine negativen Schlüssel.
-
Es dürfen keine Datensätze ohne Name, Vorname, PLZ und Ort angelegt
werden.
-
Die Postleitzahl ist ein Zahlenwert und darf nicht negativ sein
-
Es soll nach dem Namen und Ort gesucht werden.
Deswegen sollen diese mit einem Index verknüpft werden
mysql> CREATE TABLE kunden( -> kunden_nr TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, -> name CHAR(30) NOT NULL, -> vorname CHAR (30) NOT NULL, -> strasse CHAR (30), -> plz INT(5) UNSIGNED NOT NULL, -> ort CHAR (30) NOT NULL, -> PRIMARY KEY(kunden_nr), -> INDEX(name, ort);
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES; +-------------------------+ | Tables_in_testdatenbank | +-------------------------+ | kunden | +-------------------------+ 1 row in set (0.00 sec)
mysql>
|
Mit dem Befehl SHOW TABLES können Sie nachsehen, ob die
Tabelle angelegt wurde.
Ein weiterer sehr interessanter Befehl ist EXPLAIN. Mit
diesem Kommando können sie die Tabellendefinition überprüfen.
|
|
mysql> DROP TABLE [IF EXISTS] tbl_name [, tbl_name, ...]
|
Alles was kommt muß auch mal wieder gehen. Manche netten Nachbarn
nehmen den Zeitpunkt zwar nicht immer so genau, aber bei einer
Datenbank bestimmen Sie, wann es Zeit ist, zu verschwinden.
Bei MySQL ist es nicht wie bei anderen Programmen, bei denen Sie 75
Mal gefragt werden, ob Sie sich auch wirklich sicher sind! MySQL
löscht nach bestätigen der Eingabetaste gnadenlos.
Aus diesem Grunde ist es ratsam, bevor Sie mit der Arbeit an
einer Datenbank anfangen eine Sicherheitskopie anzulegen.
(Wie, wird in den vorangegangenen Kapiteln beschrieben)
|
mysql> CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (spalten_name{(länge)]....];
|
Sie legen normalerweise die Indizes bereist bei Tabellenerstellung
fest. Hin und Wieder kommt es aber vor, dass Sie einen weiteren Index
brauchen.
Löschen können Sie einen Index mittels des Befehls
DROP INDEX.
|
mysql> ALTER TABLE tbl_name tabellen_optionen;
|
Wenn Sie bei einer bestehenden Tabelle eine Spalte hinzufügen wollen,
brauchen Sie nicht eine neue Tabelle erzeugen und diese verknüpfen.
Sie können mittels des Befehls ALTER Veränderungen an
bestehenden Tabellen vornehmen.
Folgen zeige ich Ihnen einige Syntax, an denen Sie sehen können,
was ALTER alles kann.
mysql> ALTER TABLE kunden ADD email CHAR(30);
|
Damit legen erzeugen Sie eine neue Spalte namens Email.
mysql> ALTER TABLE kunden DROP email;
|
Keine gute Idee? Dann löschen Sie doch einfach die Spalte Email
wieder...
mysql> ALTER TABLE kunden DROP INDEX name;
|
Damit löschen Sie den Index der bei dem Nachnamen angelegt wurde.
mysql> ALTER TABLE kunden DROP PRIMERY KEY;
|
Somit wird der Primärschlüssel der auf die Kundennummer gelegt war,
gelöscht.
mysql> ALTER TABLE kunden ADD PRIMERY KEY (kunden_nr);
|
War ein Fehler? Dann erstellen Sie ihn einfach wieder.
mysql> ALTER TABLE kunden MODIFY ort CHAR(50);
|
Mit der MODIFY-Option ändern Sie den Datentyp. In dem Beispiel wir die
Zeichenlänge bei der Spalte ort von 30 auf 50 angehoben.
mysql> ALTER TABLE kunden CHANGE ort wohnort CHAR(50);
|
Hiermit können Sie nicht nur den Datentyp sondern auch gleich die
Bezeichnung ändern
mysql> ALTER TABLE kunden RENAME kunden;
|
Sie können sogar ganze Tabellen umbenennen. Aber achten Sie bitte auf
die von Ihnen gesetzten Beziehungen! Diese ändert MySQL leider nicht
automatisch.
mysql> ALTER TABLE kunden ALTER plz SET DEFAULT 85253;
|
Mit dieser Option können Sie der Postleitzahl einen Vorgabewert von
85253 zuweisen.
|
|