Saphir: CREATE TABLE

Hallo zusammen,

kann mir jemand sagen wieso folgende MYSQL Anweisung nicht funktioniert?

CREATE TABLE `Teilnehmer`(  
`Teilnehmer_ID` INT(100) NOT NULL,  
`Vorname` VARCHAR(50) NOT NULL,  
`Nachname` VARCHAR(50) NOT NULL,  
PRIMARY KEY(Teilnehmer_ID),  
INDEX ix_td(Kurs_ID),  
INDEX ix_td(Mannschaft_ID),  
FOREIGN KEY(Kurs_ID) REFERENCES Kurs(Kurs_ID) ON DELETE CASCADE ON UPDATE CASCADE  
FOREIGN KEY(Mannschaft_ID) REFERENCES Mannschaft(Mannschaft_ID) ON DELETE CASCADE ON UPDATE CASCADE  
)  
ENGINE = InnoDB

Ich bekomme folgende Fehlermeldung.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY(Mannschaft_ID) REFERENCES Mannschaft(Mannschaft_ID) ON DELETE CASCAD' at line 9

  1. Hallo,

    kann mir jemand sagen wieso folgende MYSQL Anweisung nicht funktioniert?

    CREATE TABLE Teilnehmer(

    Teilnehmer_ID INT(100) NOT NULL,
    Vorname VARCHAR(50) NOT NULL,
    Nachname VARCHAR(50) NOT NULL,
    PRIMARY KEY(Teilnehmer_ID),
    INDEX ix_td(Kurs_ID),
    INDEX ix_td(Mannschaft_ID),
    FOREIGN KEY(Kurs_ID) REFERENCES Kurs(Kurs_ID) ON DELETE CASCADE ON UPDATE CASCADE
    FOREIGN KEY(Mannschaft_ID) REFERENCES Mannschaft(Mannschaft_ID) ON DELETE CASCADE ON UPDATE CASCADE
    )
    ENGINE = InnoDB

      
     - die Spalten mit den Namen  
         Kurs\_ID  
         Mannschafts\_ID  
       fehlen.  
      
     - Deswegen kannst Du weder Indexe für die Spalten anlegen noch kannst Du  
       FOREIGN-KEY-Constraints anlegen  
      
     - Du kannst außerdem nicht zwei verschiedene Indexe mit gleichem Namen anlegen  
       Es bietet sich eventuell ein kombinierter Index an:  
       INDEX ix\_td(Kurs\_ID, Mannschaft\_ID)  
      
     - Die Tabellen Kurs und Mannschaft müssen vor der Tabelle Teilnehmer angelegt  
       werden.  
      
    Freundliche Grüße  
      
    Vinzenz
    
      • die Spalten mit den Namen
             Kurs_ID
             Mannschafts_ID
           fehlen.

      • Deswegen kannst Du weder Indexe für die Spalten anlegen noch kannst Du
           FOREIGN-KEY-Constraints anlegen

      • Du kannst außerdem nicht zwei verschiedene Indexe mit gleichem Namen anlegen
           Es bietet sich eventuell ein kombinierter Index an:
           INDEX ix_td(Kurs_ID, Mannschaft_ID)

      • Die Tabellen Kurs und Mannschaft müssen vor der Tabelle Teilnehmer angelegt
           werden.

      Freundliche Grüße

      Vinzenz

      Ach verdammt. Natürlich... ich bin echt blind. Vielen Dank, es klappt jetzt.
      Ich hab den Index jetzt einmal ix_td1 und ix_td2 genannt. Gibt es Unterschiede wenn ich einen kombinierten Index benutze?
      Oder wieso wird der Index ix_td geschrieben? ( Ich hab das aus einem SQL Script).

      So hat es geklappt:

      CREATE TABLE `Teilnehmer`(  
      `Teilnehmer_ID` INT(100) NOT NULL,  
      `Vorname` VARCHAR(50) NOT NULL,  
      `Nachname` VARCHAR(50) NOT NULL,  
      `Kurs_ID` VARCHAR(50) NOT NULL,  
      `Mannschaft_ID` INT(100) NOT NULL,  
      PRIMARY KEY(Teilnehmer_ID),  
      INDEX ix_td1(Kurs_ID),  
      INDEX ix_td2(Mannschaft_ID),  
      FOREIGN KEY(Kurs_ID) REFERENCES Kurs(Kurs_ID) ON DELETE CASCADE ON UPDATE CASCADE,  
      FOREIGN KEY(Mannschaft_ID) REFERENCES Mannschaft(Mannschaft_ID) ON DELETE CASCADE ON UPDATE CASCADE  
      )  
      ENGINE = InnoDB