Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m290_guko:learningunits:lu08:theorie:d_fk-alter-table [2025/10/19 22:27] – gkoch | modul:m290_guko:learningunits:lu08:theorie:d_fk-alter-table [2025/10/27 07:23] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| **Ziel:** Bereits bestehende Tabellen mit **ALTER TABLE** um Fremdschlüssel ergänzen und verstehen, was **RESTRICT**, | **Ziel:** Bereits bestehende Tabellen mit **ALTER TABLE** um Fremdschlüssel ergänzen und verstehen, was **RESTRICT**, | ||
| + | |||
| **Voraussetzung: | **Voraussetzung: | ||
| - | ===== 0) ALTER TABLE – Kurzüberblick | + | ===== 0) ALTER TABLE – Spalte in bestehende Tabelle hinzufügen |
| Mit **ALTER TABLE** können bestehende Tabellen geändert werden – also auch Fremdschlüssel hinzugefügt werden. | Mit **ALTER TABLE** können bestehende Tabellen geändert werden – also auch Fremdschlüssel hinzugefügt werden. | ||
| <WRAP box round center 80%> | <WRAP box round center 80%> | ||
| - | **Spalte hinzufügen** <code sql> | + | **Spalte hinzufügen |
| + | <code sql> | ||
| ALTER TABLE table_name | ALTER TABLE table_name | ||
| - | ADD COLUMN neue_spalte DATENTYP | + | ADD COLUMN neue_spalte DATENTYP [AFTER bestehende_spalte]; |
| </ | </ | ||
| Zeile 18: | Zeile 20: | ||
| ALTER TABLE table_name | ALTER TABLE table_name | ||
| ADD CONSTRAINT fk_name | ADD CONSTRAINT fk_name | ||
| - | FOREIGN KEY (fk_spalte) | + | FOREIGN KEY (neue_spalte) |
| REFERENCES parent_table(parent_pk) | REFERENCES parent_table(parent_pk) | ||
| - | [ON DELETE | + | ON DELETE RESTRICT|CASCADE|SET NULL |
| - | [ON UPDATE | + | ON UPDATE RESTRICT|CASCADE|SET NULL; |
| </ | </ | ||
| </ | </ | ||
| + | <WRAP center tip round 80%> | ||
| + | [[https:// | ||
| + | </ | ||
| ===== 1) SET NULL: Redaktor:in (editor_id) in posts ===== | ===== 1) SET NULL: Redaktor:in (editor_id) in posts ===== | ||
| Zeile 44: | Zeile 48: | ||
| UPDATE posts SET editor_id = 2 WHERE post_id = 1; -- Post #1: Editor = martin | UPDATE posts SET editor_id = 2 WHERE post_id = 1; -- Post #1: Editor = martin | ||
| UPDATE posts SET editor_id = 1 WHERE post_id = 2; -- Post #2: Editor = caro | UPDATE posts SET editor_id = 1 WHERE post_id = 2; -- Post #2: Editor = caro | ||
| - | UPDATE posts SET editor_id = 3 WHERE post_id = 3; -- Post #3: Editor = shaolin | + | UPDATE posts SET editor_id = 4 WHERE post_id = 3; -- Post #3: Editor = shaolin |
| </ | </ | ||
| </ | </ | ||
| Zeile 114: | Zeile 118: | ||
| -- … die zugehörigen Kommentare sind automatisch weg: | -- … die zugehörigen Kommentare sind automatisch weg: | ||
| SELECT * FROM comments WHERE post_id = 2; -- → keine Zeilen | SELECT * FROM comments WHERE post_id = 2; -- → keine Zeilen | ||
| - | |||
| - | -- Rest bleibt unverändert: | ||
| - | SELECT post_id, | ||
| - | FROM comments | ||
| - | ORDER BY post_id; | ||
| </ | </ | ||
| </ | </ | ||
| Zeile 131: | Zeile 130: | ||
| ===== 3) Zusammenfassung ===== | ===== 3) Zusammenfassung ===== | ||
| - | * **RESTRICT**: | + | |
| - | * **CASCADE**: | + | * **CASCADE**: |
| - | * **SET NULL**: Kindzeile bleibt, der **optionale** Verweis wird **NULL**. | + | * **SET NULL**: Kindzeile bleibt, der **optionale** Verweis wird **NULL**. |