Announcement

Collapse
No announcement yet.

Foreign Keys und on update/delete

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Foreign Keys und on update/delete

    Hallo

    Ich hab leider ein Problem beim korrekten erstellen meiner SQL Datenbanken.
    Es sind 3 Tables vorhanden:

    In der 1. Tabelle sind die User gespeichert.
    In der 2. Tabelle die Kurse.
    Die 3. Tabelle enthält pro Datensatz jeweils die ID eines User + die ID eines Kurses.
    Um das löschen/updaten der ID in den Tabellen zu unterbinden haben ich den Foreign Keys: on update cascade on delete restrict hinzugefügt.

    Allerdings lassen sich in den beiden Tabellen dennoch beliebig Datensätze löschen bzw. die ID ändern.

    Woran liegt das?

    Hier die von mir verwendeten SQL Befehle:

    User DB:
    Code:
    Create table schueler (
    `ID` INT(4) NOT NULL AUTO_INCREMENT,
    `SchuelerNR` VARCHAR(20) NOT NULL,
    `Name` VARCHAR(20) NOT NULL,
    `Vorname` VARCHAR(20) NOT NULL,
    `Klasse` VARCHAR(2) NOT NULL,
    Primary Key(ID)
    );
    Kurse DB:
    Create table kurse (
    `KID` INT(2) NOT NULL AUTO_INCREMENT,
    `Thema` VARCHAR(150) NOT NULL,
    `Beschreibung` TEXT NULL,
    `Teilnehmer` INT(2) NOT NULL,
    Primary Key(KID)
    );
    Und die 3. Tabelle mit den Foreign Keys:

    Create table teilnahme (
    `TID` INT(4) NOT NULL AUTO_INCREMENT,
    `Schueler` INT(4) NOT NULL,
    `Veranstaltung` INT(2) NOT NULL,
    Primary Key(TID),
    Foreign Key (Schueler)
    references schueler(ID)
    on update cascade
    on delete restrict,
    Foreign Key (Veranstaltung) references kurse(KID)
    on update cascade
    on delete restrict
    );
    Vielen Dank

    mit freundlichen Grüßen
    Lync

  • #2
    Vermutlich verwendest Du die MyIsam Enginge. Dort werden PK-FK Constraints schlicht und einfach ignoriert. Du musst die InnoDB Engine verwenden.

    Dim

    PS: ON UPDATE CASCADE unterbindet nicht das Update, sondern gibt die Änderung an das FK Feld weiter - ein absolutes No Go, da der PK einer Tabelle unter normalen Umständen nie geändert werden soll.
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Ah..
      das war mein Fehler..
      das mit dem cascade hab ich mittlerweile gegen restrict ersetzt.

      Vielen Dank

      Comment

      Working...
      X