Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

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] gkochmodul: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**, **CASCADE** und **SET NULL** bewirken. **Ziel:** Bereits bestehende Tabellen mit **ALTER TABLE** um Fremdschlüssel ergänzen und verstehen, was **RESTRICT**, **CASCADE** und **SET NULL** bewirken.
 +
 **Voraussetzung:** Die Codebeispiele verwenden die Tabellen **users**, **posts**, **categories**, **post_category** inkl. Beispieldaten aus der vorherigen Seite. **Voraussetzung:** Die Codebeispiele verwenden die Tabellen **users**, **posts**, **categories**, **post_category** inkl. Beispieldaten aus der vorherigen Seite.
  
  
-===== 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 (generelle Syntax)** 
 +<code sql>
 ALTER TABLE table_name ALTER TABLE table_name
-ADD COLUMN neue_spalte DATENTYP [NULL|NOT NULL] [AFTER bestehende_spalte];+ADD COLUMN neue_spalte DATENTYP [AFTER bestehende_spalte];
 </code> </code>
  
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 {RESTRICT|CASCADE|SET NULL}] +ON DELETE RESTRICT|CASCADE|SET NULL 
-[ON UPDATE {RESTRICT|CASCADE|SET NULL}];+ON UPDATE RESTRICT|CASCADE|SET NULL;
 </code> </code>
 </WRAP> </WRAP>
  
 +<WRAP center tip round 80%> 
 +[[https://www.youtube.com/watch?v=aaO2cUhN9zA|ON DELETE: NO ACTION, SET NULL, CASCADE, SET DEFAULT]]((Prof. Dr. Jens Dittrich – Big Data Analytics / YouTube)) -> (9:22, de) Referenzaktionen kompakt: was bei Löschen/Ändern passiert und wann welche Option sinnvoll ist. 
 +</WRAP>
  
 ===== 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 = WHERE post_id = 3;  -- Post #3: Editor = shaolin+UPDATE posts SET editor_id = WHERE post_id = 3;  -- Post #3: Editor = shaolin (wenn Shaolin bereits gelöscht wurde und neu hier hinzugefügt wurde, dann hat er jetzt user_id 4)
 </code> </code>
 </WRAP> </WRAP>
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;   -- zeigt jetzt nur noch post_id = 5 mit 1 Kommentar 
 </code> </code>
 </WRAP> </WRAP>
Zeile 131: Zeile 130:
 ===== 3) Zusammenfassung ===== ===== 3) Zusammenfassung =====
  
-* **RESTRICT**: Löschen/Ändern der Elternzeile **nur** möglich, wenn **keine** Kindzeilen verweisen (Standardverhalten; schützt Datenkonsistenz). +  * **RESTRICT**: Löschen/Ändern der Elternzeile **nur** möglich, wenn **keine** Kindzeilen verweisen (Standardverhalten; schützt Datenkonsistenz). 
-* **CASCADE**: Kindzeilen werden bei Änderungen/Löschungen der Eltern **automatisch** mitgeändert oder gelöscht (optimal für Zwischentabellen). +  * **CASCADE**: Kindzeilen werden bei Änderungen/Löschungen der Eltern **automatisch** mitgeändert oder gelöscht (optimal für Zwischentabellen). 
-* **SET NULL**: Kindzeile bleibt, der **optionale** Verweis wird **NULL**.+  * **SET NULL**: Kindzeile bleibt, der **optionale** Verweis wird **NULL**.
  
  • modul/m290_guko/learningunits/lu08/theorie/d_fk-alter-table.1760905645.txt.gz
  • Zuletzt geändert: 2025/10/19 22:27
  • von gkoch