» SelfLinux » Anwendungs-Software » Datenbanken » MySQL - Datenbanken » Abschnitt 9 SelfLinux-0.10.0
zurück   Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter

SelfLinux-Logo
Dokument MySQL - Datenbanken - Abschnitt 9 Revision: 1.1.2.11
Autor:  Alexander Fischer
Formatierung:  Torsten Hemm
Lizenz:  GFDL
 

12 Tabellen (Relationen)

Tabellen speichern Informationen. Wie Sie aber die Tabellen erstellen, löschen und verändern, zeige ich Ihnen in den folgenden Kapiteln


12.1 Tabellen erzeugen

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.


12.1.1 Syntax-Definition

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:

  col_name [(length)]

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)


12.1.2 Anwendungsbeispiel

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.




12.2 Tabellen (Relationen) löschen

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)



12.3 Indexierung

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.



12.4 Tabellen verändern

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.




zurück   Seitenanfang Startseite Kapitelanfang Inhaltsverzeichnis GFDL   weiter