4 Datenbank und Tabellen anlegen

4.1 Die Programmiersprache SQL

SQL (Structured Query Language) ist die Standardsprache für die Arbeit mit relationalen Datenbanken. Sie wurde in den 1970er Jahren entwickelt und seitdem kontinuierlich erweitert. SQL ist in verschiedene Sprachbereiche unterteilt:

In diesem Kapitel konzentrieren wir uns auf die DDL-Befehle zum Anlegen von Datenbanken und Tabellen.

4.2 Anlegen der Datenbank

4.2.1 Wie lege ich eine Datenbank an?

Eine neue Datenbank wird mit dem Befehl CREATE DATABASE erstellt:

CREATE DATABASE firmenverwaltung;

Um die neue Datenbank anschließend zu verwenden, muss sie mit dem Befehl USE ausgewählt werden:

USE firmenverwaltung;

Beim Erstellen der Datenbank gibt es einige wichtige Optionen:

-- Mit Angabe von Zeichensatz und Sortierung
CREATE DATABASE firmenverwaltung 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- Nur erstellen, wenn die Datenbank noch nicht existiert
CREATE DATABASE IF NOT EXISTS firmenverwaltung;

4.2.2 Wie lösche ich eine Datenbank?

Eine Datenbank kann mit dem Befehl DROP DATABASE gelöscht werden:

DROP DATABASE firmenverwaltung;

-- Sicherere Variante, die prüft, ob die Datenbank existiert
DROP DATABASE IF EXISTS firmenverwaltung;

ACHTUNG: Dieser Befehl löscht die Datenbank und alle darin enthaltenen Daten unwiderruflich!

4.2.3 Wie weise ich einen Zeichensatz zu?

Der Zeichensatz bestimmt, welche Zeichen in der Datenbank gespeichert werden können. Er kann bei der Erstellung der Datenbank festgelegt werden:

-- Bei der Erstellung
CREATE DATABASE firmenverwaltung 
CHARACTER SET utf8mb4;

-- Nachträglich ändern
ALTER DATABASE firmenverwaltung 
CHARACTER SET utf8mb4;

Empfohlene Zeichensätze sind:

4.2.4 Wie weise ich eine Sortierung zu?

Die Sortierung (Collation) bestimmt, wie Zeichenketten verglichen und sortiert werden. Auch sie kann bei der Erstellung der Datenbank festgelegt werden:

-- Bei der Erstellung
CREATE DATABASE firmenverwaltung 
COLLATE utf8mb4_unicode_ci;

-- Nachträglich ändern
ALTER DATABASE firmenverwaltung 
COLLATE utf8mb4_unicode_ci;

Häufig verwendete Sortierungen sind:

4.3 Tabellen anlegen

4.3.1 Welche Datentypen gibt es?

MySQL bietet verschiedene Datentypen für unterschiedliche Arten von Daten:

Zahlen:

Text:

Datum und Zeit:

Sonstige:

4.3.2 Wie lege ich eine Tabelle an?

Eine neue Tabelle wird mit dem Befehl CREATE TABLE erstellt:

CREATE TABLE mitarbeiter (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vorname VARCHAR(50) NOT NULL,
    nachname VARCHAR(50) NOT NULL,
    geburtsdatum DATE,
    abteilung VARCHAR(100),
    gehalt DECIMAL(10,2)
);

Wichtige Optionen bei der Definition der Spalten sind:

4.3.3 Wann eine Aufzählung (ENUM) und wann eine neue Tabelle?

Eine Aufzählung (ENUM) bietet sich an, wenn:

CREATE TABLE mitarbeiter (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    status ENUM('aktiv', 'beurlaubt', 'ausgeschieden')
);

Eine eigene Tabelle ist dagegen sinnvoll, wenn:

CREATE TABLE status (
    id INT AUTO_INCREMENT PRIMARY KEY,
    bezeichnung VARCHAR(50),
    beschreibung TEXT
);

CREATE TABLE mitarbeiter (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    status_id INT,
    FOREIGN KEY (status_id) REFERENCES status(id)
);

4.3.4 Wann verwende ich NOT NULL?

Die Option NOT NULL sollte verwendet werden, wenn:

CREATE TABLE bestellung (
    id INT AUTO_INCREMENT PRIMARY KEY,
    kunde_id INT NOT NULL,
    bestelldatum DATE NOT NULL,
    lieferdatum DATE,  -- kann NULL sein
    FOREIGN KEY (kunde_id) REFERENCES kunden(id)
);

4.3.5 Wie lege ich einen Fremdschlüssel fest?

Fremdschlüssel werden mit der Option FOREIGN KEY definiert:

CREATE TABLE bestellungen (
    id INT AUTO_INCREMENT PRIMARY KEY,
    kunde_id INT NOT NULL,
    datum DATE NOT NULL,
    FOREIGN KEY (kunde_id) REFERENCES kunden(id)
        ON DELETE RESTRICT
        ON UPDATE CASCADE
);

Optionen für Fremdschlüssel:

Mögliche Aktionen sind:

4.3.6 Wie kann ich Tabellen aus anderen herleiten?

Mit der Klausel CREATE TABLE ... LIKE können Sie eine neue Tabelle mit der gleichen Struktur wie eine bestehende Tabelle erstellen:

-- Leere Kopie der Tabelle "mitarbeiter" erstellen
CREATE TABLE mitarbeiter_archiv LIKE mitarbeiter;

-- Kopie mit Daten erstellen
CREATE TABLE mitarbeiter_backup 
AS SELECT * FROM mitarbeiter;

4.3.7 Temporäre Tabellen!

Für temporäre Tabellen, die nur während der aktuellen Session existieren, können Sie den Befehl CREATE TEMPORARY TABLE verwenden:

CREATE TEMPORARY TABLE temp_results (
    id INT,
    name VARCHAR(100),
    wert DECIMAL(10,2)
);

Temporäre Tabellen werden automatisch am Ende der Session gelöscht. Sie sind nützlich, um Zwischenergebnisse zu speichern oder komplexe Abfragen zu vereinfachen.