Tabellenstruktur: CREATE TABLE

Erste Schritte: Tabellenstruktur: CREATE TABLE

Um eine Tabelle in einer MySQL/MariaDB-Datenbank anzulegen, verwendest du den SQL-Befehl CREATE TABLE. Dabei definierst du, wie deine Tabelle aufgebaut sein soll – also wie Spalten heißen, welche Datentypen sie haben und ob z. B. ein Primärschlüssel existiert. In diesem Tutorial schauen wir uns an, wie du mit CREATE TABLE eine saubere Struktur für deine Daten definierst.

1. Grundsyntax von CREATE TABLE

CREATE TABLE tabellenname (
    spaltenname1 DATENTYP [Optionen],
    spaltenname2 DATENTYP [Optionen],
    ...
    [CONSTRAINT ...] 
) [Tabellenoptionen];
  • tabellenname: Der Name deiner Tabelle
  • spaltenname1 DATENTYP: Jede Spalte hat einen Namen und einen Typ (z. B. INT, VARCHAR, DATE)
  • Optionen: z. B. NOT NULL, AUTO_INCREMENT, DEFAULT-Wert etc.
  • CONSTRAINT: Definiert zusätzliche Regeln wie PRIMARY KEY, FOREIGN KEY
  • Tabellenoptionen: z. B. ENGINE=InnoDB, CHARSET=utf8mb4

2. Einfaches Beispiel

Nehmen wir an, du möchtest eine Tabelle „users“ für eine Benutzerverwaltung. Du definierst eine ID, Benutzernamen, Passwort und E-Mail:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    passwort VARCHAR(255) NOT NULL,
    email VARCHAR(100),
    erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • id INT AUTO_INCREMENT PRIMARY KEY: definiert eine numerische ID, die automatisch hochgezählt wird. PRIMARY KEY ist der eindeutige Schlüssel.
  • username VARCHAR(50) NOT NULL: ein String-Feld (max. 50 Zeichen), das nicht leer sein darf (NOT NULL).
  • passwort VARCHAR(255) NOT NULL: z. B. für gehashte Passwörter.
  • email VARCHAR(100): optional (kein NOT NULL). Hier kannst du E-Mail-Adressen speichern.
  • erstellt_am DATETIME mit DEFAULT CURRENT_TIMESTAMP trägt automatisch das aktuelle Datum/Uhrzeit ein.
  • ENGINE=InnoDB: InnoDB ist eine beliebte Storage Engine in MySQL/MariaDB. Ermöglicht Transaktionen und FOREIGN KEYS.
  • DEFAULT CHARSET=utf8mb4: empfiehlt sich für volle Unicode-Unterstützung.

3. Assoziationen und Fremdschlüssel

Möchtest du Beziehungen (Relationen) zwischen Tabellen anlegen, nutzt du FOREIGN KEY und verweist damit auf einen PRIMARY KEY in einer anderen Tabelle:

CREATE TABLE guestbook (
    id INT AUTO_INCREMENT,
    user_id INT NOT NULL,
    nachricht TEXT NOT NULL,
    datum DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    CONSTRAINT fk_guestbook_user
        FOREIGN KEY (user_id) REFERENCES users(id)
        ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • FOREIGN KEY (user_id) REFERENCES users(id): sagt, user_id in guestbook entspricht id in users.
  • ON DELETE CASCADE: Wenn ein Nutzer gelöscht wird, verschwinden seine Gästebucheinträge auch automatisch.

4. Zeichensatz und Collation

Achte auf den richtigen Zeichensatz (z. B. utf8mb4) und Collation (z. B. utf8mb4_general_ci oder utf8mb4_unicode_ci) für Mehrsprachigkeit und Sonderzeichen/Emojis. Du kannst das auf Datenbankebene und/oder bei CREATE TABLE definieren:

CREATE TABLE beispiel (
    ...
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_general_ci;

5. Verwaltung & Änderungen

  • SHOW TABLES: Listet existierende Tabellen
  • DESCRIBE tabellenname: Zeigt Struktur einer Tabelle
  • ALTER TABLE: Änderungen wie Spalte hinzufügen, Typ ändern etc.
  • DROP TABLE: Löscht eine Tabelle mitsamt ihrer Daten (vorsicht!).

6. Beispiel: Komplette SQL-Datei

Häufig nutzt du eine .sql-Datei, um mehrere Tabellen auf einmal anzulegen, etwa:

CREATE DATABASE IF NOT EXISTS meineDB
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;
USE meineDB;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    passwort VARCHAR(255) NOT NULL,
    email VARCHAR(100),
    erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE guestbook (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    nachricht TEXT NOT NULL,
    datum DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_guestbook_user
        FOREIGN KEY (user_id) REFERENCES users(id)
        ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Damit kannst du in phpMyAdmin (Import-Funktion) oder in der MySQL-CLI (mysql -u user -p < datei.sql) alle Tabellen auf einmal anlegen.

7. Typische Datentypen

  • INT, TINYINT: Für Ganzzahlen (z. B. INT für ID, TINYINT für boolsche Flags)
  • VARCHAR(n): Zeichenketten begrenzter Länge (z. B. Namen, E-Mail)
  • TEXT: Längere Texte (Kommentare, Beschreibung etc.)
  • DATE, DATETIME, TIMESTAMP: Datums- und Zeitangaben
  • DECIMAL(x,y): Für Geldwerte oder exakte Zahlen (z. B. 10,2 => max. 10 Stellen, 2 Nachkommastellen)

Fazit

Mit CREATE TABLE legst du in MySQL/MariaDB die Struktur für deine Daten an. Du definierst Spalten, Datentypen, Schlüssel (PRIMARY KEY, FOREIGN KEY) und kannst damit schnell eine Basis für deine PHP-Anwendung schaffen. Achte auf den richtigen Zeichensatz (UTF-8), sinnvolle Spaltennamen und aussagekräftige Typen. Mit den Befehlen SHOW TABLES, DESCRIBE oder DROP TABLE behältst du den Überblick und passt deine Tabellen bei Bedarf an, sodass du eine saubere, stabile Grundlage für dein Projekt erhältst.