DDL: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Einstieg == Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen Datenbanken zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankenentwicklungsprozess, bevor Daten eingefügt werden können. --- == CREATE SCHEMA == Alle Datenbank-Tabellen befinden sich…“ |
Keine Bearbeitungszusammenfassung |
||
| (5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== Einstieg == | == Einstieg == | ||
Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen | Die '''Data Definition Language''' (kurz '''DDL''') ist ein fundamentaler Bestandteil von [[SQL]]. Die DDL wird eingesetzt, um das Datenschema in relationalen [[Datenbank]]en zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankentwicklungsprozess, bevor Daten eingefügt werden können. | ||
[[Datei:ERM-Softwarentwicklungsprozess.png|mini|Einordnung im Softwareentwicklungsprozess]] | |||
--- | [[Datei:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]] | ||
[[Datei:Schlüssel-SchlüsselInTabellen.png|mini|Schlüsselbeziehungen in Tabellen]] | |||
== CREATE SCHEMA == | == CREATE SCHEMA == | ||
Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein. | Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein. | ||
'''Syntax:''' | '''Syntax:''' | ||
| Zeile 20: | Zeile 21: | ||
<code>Schemaname.Tabellenname</code> | <code>Schemaname.Tabellenname</code> | ||
Das Schema | Das Schema <code>friseur</code> verwaltet alle Salons. Eine Tabelle <code>salon</code> lässt sich also über <code>friseur.salon</code> ansprechen. | ||
== CREATE TABLE == | == CREATE TABLE == | ||
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar. | Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar. | ||
'''Syntax:''' | '''Syntax:''' | ||
| Zeile 53: | Zeile 52: | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== CONSTRAINTs (Einschränkungen) == | == CONSTRAINTs (Einschränkungen) == | ||
CONSTRAINT heißt übersetzt | CONSTRAINT heißt übersetzt „Zwang“ oder „Einschränkung“. Ein CONSTRAINT ist eine Bedingung, der ein Datensatz zwingend entsprechen muss. Wenn eine der aktuell gültigen Bedingungen verletzt wird, wird der betreffende Datensatz nicht gespeichert. Hierdurch wird die '''Datenkonsistenz''' gewährleistet. | ||
Die Befehle | Die Befehle <code>PRIMARY KEY</code>, <code>FOREIGN KEY</code>, <code>NOT NULL</code> und <code>UNIQUE</code> fallen in die Kategorie CONSTRAINT. Nach der Attributliste wird das Schlüsselwort <code>CONSTRAINT</code> gesetzt (wobei das Wort <code>CONSTRAINT</code> selbst oft optional ist, wenn man die Standardnamen des DBMS akzeptiert). | ||
=== Primärschlüssel (PRIMARY KEY) === | === Primärschlüssel (PRIMARY KEY) === | ||
Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines Primärschlüssels zu definieren: | Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines [[Schlüssel|Primärschlüssels]] zu definieren: | ||
1. '''Am Ende der Attributliste:''' | 1. '''Am Ende der Attributliste:''' | ||
| Zeile 83: | Zeile 80: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
3. '''Mit explizitem CONSTRAINT-Namen:''' (Im Beispiel | 3. '''Mit explizitem CONSTRAINT-Namen:''' (Im Beispiel „pk“ für primary key) | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
CREATE TABLE mitarbeiter ( | CREATE TABLE mitarbeiter ( | ||
| Zeile 95: | Zeile 92: | ||
=== Fremdschlüssel (FOREIGN KEY) === | === Fremdschlüssel (FOREIGN KEY) === | ||
Mit einem Fremdschlüssel wird eine Spalte der einen Tabelle mit einer gleichartigen Spalte einer anderen Tabelle (meist dem Primärschlüssel) verknüpft, um referenzielle Integrität sicherzustellen. Beide Spalten müssen den exakt gleichen Datentyp besitzen. | Mit einem [[Schlüssel|Fremdschlüssel]] wird eine Spalte der einen Tabelle mit einer gleichartigen Spalte einer anderen Tabelle (meist dem Primärschlüssel) verknüpft, um referenzielle Integrität sicherzustellen. Beide Spalten müssen den exakt gleichen Datentyp besitzen. | ||
:'''Wichtig:''' Die referenzierte Tabelle (hier <code>salon</code>) muss bereits existieren, bevor der Fremdschlüssel in der referenzierenden Tabelle (<code>mitarbeiter</code>) angelegt werden kann. | |||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
| Zeile 109: | Zeile 106: | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== FOREIGN KEY Optionen (Referenzielle Aktionen) ==== | ==== FOREIGN KEY Optionen (Referenzielle Aktionen) ==== | ||
Diese Optionen bestimmen das Verhalten der Detailtabelle, wenn in der Primärtabelle Datensätze geändert ( | Diese Optionen bestimmen das Verhalten der Detailtabelle, wenn in der Primärtabelle Datensätze geändert (<code>ON UPDATE</code>) oder gelöscht (<code>ON DELETE</code>) werden: | ||
* '''NO ACTION / RESTRICT''': Die Änderung oder Löschung in der Primärtabelle wird verweigert und mit einem Fehler abgebrochen, falls abhängige Datensätze existieren. | * '''NO ACTION / RESTRICT''': Die Änderung oder Löschung in der Primärtabelle wird verweigert und mit einem Fehler abgebrochen, falls abhängige Datensätze existieren. | ||
* '''CASCADE''': Die Änderung (z. B. eine neue ID) oder die Löschung wird | * '''CASCADE''': Die Änderung (z. B. eine neue ID) oder die Löschung wird „kaskadierend“ an die Detailtabelle weitergegeben. Löscht man den Salon, werden alle Mitarbeiter dieses Salons ebenfalls gelöscht. | ||
* '''SET NULL''': Wird der Primärschlüssel gelöscht oder geändert, wird der Fremdschlüssel in der Detailtabelle auf | * '''SET NULL''': Wird der Primärschlüssel gelöscht oder geändert, wird der Fremdschlüssel in der Detailtabelle auf <code>NULL</code> gesetzt (nur möglich, wenn die Spalte nicht als <code>NOT NULL</code> definiert ist). | ||
=== NOT NULL === | === NOT NULL === | ||
Die Schlüsselwörter | Die Schlüsselwörter <code>NULL</code> bzw. <code>NOT NULL</code> legen fest, ob leere Werte in der Spalte zulässig sind. Der Standardwert ist „zulässig“ (<code>NULL</code>). Primärschlüssel sollten grundsätzlich als <code>NOT NULL</code> deklariert werden. | ||
=== AUTO_INCREMENT / AUTOINCREMENT === | === AUTO_INCREMENT / AUTOINCREMENT === | ||
Dieses Schlüsselwort legt fest, dass die Werte in der Spalte automatisch vom DBMS hochgezählt werden (z. B. für IDs). | Dieses Schlüsselwort legt fest, dass die Werte in der Spalte automatisch vom DBMS hochgezählt werden (z. B. für IDs). | ||
* '''In MySQL:''' | * '''In MySQL:''' <code>idSalon INT AUTO_INCREMENT</code> | ||
* '''In MS Access:''' | * '''In MS Access:''' <code>idSalon AUTOINCREMENT</code> (wird hier wie ein eigener Datentyp behandelt). | ||
=== DEFAULT === | === DEFAULT === | ||
| Zeile 148: | Zeile 143: | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== ALTER TABLE == | == ALTER TABLE == | ||
<code>ALTER TABLE</code> ermöglicht das nachträgliche Ändern der Struktur einer vorhandenen Tabelle. | |||
Mögliche Änderungsoperatoren sind: | Mögliche Änderungsoperatoren sind: | ||
| Zeile 170: | Zeile 163: | ||
ALTER TABLE Mitarbeiter ADD (istWeiblich BOOLEAN); | ALTER TABLE Mitarbeiter ADD (istWeiblich BOOLEAN); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== DROP TABLE == | == DROP TABLE == | ||
| Zeile 178: | Zeile 169: | ||
DROP TABLE <Tabellen_Name>; | DROP TABLE <Tabellen_Name>; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== CREATE VIEW == | == CREATE VIEW == | ||
Abfragen (DQL) können als sogenannte '''Views''' (Sichten/virtuelle Tabellen) in der Datenbank gespeichert werden. Sie verhalten sich bei Abfragen wie echte Tabellen, speichern aber keine eigenen Daten, sondern führen die hinterlegte | Abfragen (DQL) können als sogenannte '''Views''' (Sichten/virtuelle Tabellen) in der Datenbank gespeichert werden. Sie verhalten sich bei Abfragen wie echte Tabellen, speichern aber keine eigenen Daten, sondern führen die hinterlegte <code>SELECT</code>-Abfrage bei jedem Aufruf dynamisch aus. | ||
'''Syntax:''' | '''Syntax:''' | ||
| Zeile 198: | Zeile 187: | ||
[[Kategorie:Datenbanken]] | [[Kategorie:Datenbanken]] | ||
[[Kategorie: | [[Kategorie:SQL]] | ||
[[Kategorie: | [[Kategorie:AHR WuV WI GK]] | ||
[[Kategorie:AHR I Informatik LK]] | |||
[[Kategorie:FI I SDM]] | |||
Aktuelle Version vom 15. Oktober 2026, 08:10 Uhr
Einstieg
Die Data Definition Language (kurz DDL) ist ein fundamentaler Bestandteil von SQL. Die DDL wird eingesetzt, um das Datenschema in relationalen Datenbanken zu beschreiben, zu ändern oder zu entfernen. Das Erstellen von Tabellen mit Hilfe der DDL ist in der Regel der letzte strukturelle Schritt im Datenbankentwicklungsprozess, bevor Daten eingefügt werden können.



CREATE SCHEMA
Alle Datenbank-Tabellen befinden sich in einem Schema. Dieses Schema repräsentiert die Datenbank an sich. Bevor Tabellen angelegt werden können, muss ein Schema vorhanden sein.
Syntax:
CREATE SCHEMA <Schema-Name>;
Beispiel:
CREATE SCHEMA friseur;
In einem Datenbankmanagementsystem (DBMS) können mehrere Schemata verwaltet werden. Daher ist sicherzustellen, dass sich alle Anweisungen der SQL eindeutig auf ein Schema beziehen lassen, damit das DBMS die angesprochenen Tabellen identifizieren kann. Der Bezug zu einem Schema ergibt sich aus der Punktnotation:
Schemaname.Tabellenname
Das Schema friseur verwaltet alle Salons. Eine Tabelle salon lässt sich also über friseur.salon ansprechen.
CREATE TABLE
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar.
Syntax:
CREATE TABLE <Tabellen_Name> (
<Spalte 1> <Datentyp_für_Spalte_1>,
<Spalte 2> <Datentyp_für_Spalte_2>,
...
);
Beispiele: Zur Erstellung einer einfachen Mitarbeitertabelle:
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45)
);
Zur Erstellung einer simplen Salontabelle:
CREATE TABLE salon (
idsalon INT,
name VARCHAR(45)
);
CONSTRAINTs (Einschränkungen)
CONSTRAINT heißt übersetzt „Zwang“ oder „Einschränkung“. Ein CONSTRAINT ist eine Bedingung, der ein Datensatz zwingend entsprechen muss. Wenn eine der aktuell gültigen Bedingungen verletzt wird, wird der betreffende Datensatz nicht gespeichert. Hierdurch wird die Datenkonsistenz gewährleistet.
Die Befehle PRIMARY KEY, FOREIGN KEY, NOT NULL und UNIQUE fallen in die Kategorie CONSTRAINT. Nach der Attributliste wird das Schlüsselwort CONSTRAINT gesetzt (wobei das Wort CONSTRAINT selbst oft optional ist, wenn man die Standardnamen des DBMS akzeptiert).
Primärschlüssel (PRIMARY KEY)
Es gibt drei Varianten, um die Entitätsintegrität (Eindeutigkeit) mit Hilfe eines Primärschlüssels zu definieren:
1. Am Ende der Attributliste:
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
PRIMARY KEY (idmitarbeiter)
);
2. Direkt in der Spaltendefinition:
CREATE TABLE mitarbeiter (
idmitarbeiter INT PRIMARY KEY,
nachname VARCHAR(45),
vorname VARCHAR(45)
);
3. Mit explizitem CONSTRAINT-Namen: (Im Beispiel „pk“ für primary key)
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT,
CONSTRAINT pk PRIMARY KEY (idmitarbeiter)
);
Fremdschlüssel (FOREIGN KEY)
Mit einem Fremdschlüssel wird eine Spalte der einen Tabelle mit einer gleichartigen Spalte einer anderen Tabelle (meist dem Primärschlüssel) verknüpft, um referenzielle Integrität sicherzustellen. Beide Spalten müssen den exakt gleichen Datentyp besitzen.
- Wichtig: Die referenzierte Tabelle (hier
salon) muss bereits existieren, bevor der Fremdschlüssel in der referenzierenden Tabelle (mitarbeiter) angelegt werden kann.
CREATE TABLE mitarbeiter (
idmitarbeiter INT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT,
CONSTRAINT pk PRIMARY KEY (idmitarbeiter),
CONSTRAINT fk FOREIGN KEY (fksalon) REFERENCES salon(idsalon)
);
FOREIGN KEY Optionen (Referenzielle Aktionen)
Diese Optionen bestimmen das Verhalten der Detailtabelle, wenn in der Primärtabelle Datensätze geändert (ON UPDATE) oder gelöscht (ON DELETE) werden:
- NO ACTION / RESTRICT: Die Änderung oder Löschung in der Primärtabelle wird verweigert und mit einem Fehler abgebrochen, falls abhängige Datensätze existieren.
- CASCADE: Die Änderung (z. B. eine neue ID) oder die Löschung wird „kaskadierend“ an die Detailtabelle weitergegeben. Löscht man den Salon, werden alle Mitarbeiter dieses Salons ebenfalls gelöscht.
- SET NULL: Wird der Primärschlüssel gelöscht oder geändert, wird der Fremdschlüssel in der Detailtabelle auf
NULLgesetzt (nur möglich, wenn die Spalte nicht alsNOT NULLdefiniert ist).
NOT NULL
Die Schlüsselwörter NULL bzw. NOT NULL legen fest, ob leere Werte in der Spalte zulässig sind. Der Standardwert ist „zulässig“ (NULL). Primärschlüssel sollten grundsätzlich als NOT NULL deklariert werden.
AUTO_INCREMENT / AUTOINCREMENT
Dieses Schlüsselwort legt fest, dass die Werte in der Spalte automatisch vom DBMS hochgezählt werden (z. B. für IDs).
- In MySQL:
idSalon INT AUTO_INCREMENT - In MS Access:
idSalon AUTOINCREMENT(wird hier wie ein eigener Datentyp behandelt).
DEFAULT
Legt einen Standardwert fest, der eingesetzt wird, wenn bei einem neuen Datensatz kein Wert für diese Spalte übergeben wird. (Achtung: Wird in MS Access in reinem DDL oft nicht nativ unterstützt).
fksalon INT NOT NULL DEFAULT 1
UNIQUE
Sorgt dafür, dass innerhalb einer Spalte (oder Spaltenkombination) kein Wert doppelt auftreten darf.
Komplexes Beispiel (Zusammenführung aller Constraints):
CREATE TABLE mitarbeiter (
idmitarbeiter INT NOT NULL AUTO_INCREMENT,
nachname VARCHAR(45),
vorname VARCHAR(45),
fksalon INT NOT NULL DEFAULT 1,
CONSTRAINT pk_mitarbeiter PRIMARY KEY (idmitarbeiter),
CONSTRAINT fk_salon FOREIGN KEY (fksalon) REFERENCES salon(idsalon),
CONSTRAINT uq_nachname UNIQUE (nachname)
);
ALTER TABLE
ALTER TABLE ermöglicht das nachträgliche Ändern der Struktur einer vorhandenen Tabelle.
Mögliche Änderungsoperatoren sind:
- ADD: Spalten/Constraints hinzufügen.
- DROP: Spalten/Constraints entfernen.
- MODIFY / ALTER COLUMN: Datentypen ändern.
- RENAME: Umbenennen.
Beispiele: Tabelle umbenennen:
ALTER TABLE Salon RENAME TO Filiale;
Neue Spalte hinzufügen:
ALTER TABLE Mitarbeiter ADD (istWeiblich BOOLEAN);
DROP TABLE
Löscht eine vollständige Tabelle inklusive aller darin enthaltenen Daten unwiderruflich aus der Datenbank.
DROP TABLE <Tabellen_Name>;
CREATE VIEW
Abfragen (DQL) können als sogenannte Views (Sichten/virtuelle Tabellen) in der Datenbank gespeichert werden. Sie verhalten sich bei Abfragen wie echte Tabellen, speichern aber keine eigenen Daten, sondern führen die hinterlegte SELECT-Abfrage bei jedem Aufruf dynamisch aus.
Syntax:
CREATE VIEW <View-Name> AS <Select-Ausdruck>;
Beispiel:
CREATE VIEW weiblicheMitarbeiter AS
SELECT vorname, nachname
FROM mitarbeiter
WHERE istWeiblich = TRUE;