Irreführender Mysql Fehler "1005 Can´t create table" bei hinzufügen von Foreign key?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Irreführender Mysql Fehler "1005 Can´t create table" bei hinzufügen von Foreign key?

    Hallo,

    ich möchte gerne folgendes SQL Snippet ausführen:

    Code:
    use testtable;
    
    CREATE TABLE adresses (id INT AUTO_INCREMENT NOT NULL, postalCodes_id INT NOT NULL, states_id INT NOT NULL, INDEX IDX_EF19255273DBF541 (postalCodes_id), 
    INDEX IDX_EF192552B17973F (states_id), PRIMARY KEY(id)) ENGINE = InnoDB;
    
    CREATE TABLE postalCodes (id INT AUTO_INCREMENT NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
    
    CREATE TABLE states (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(45) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
    
    ALTER TABLE adresses ADD FOREIGN KEY (states_id) REFERENCES states(id);
    ALTER TABLE adresses ADD FOREIGN KEY (postalCodes_id) REFERENCES postalCodes(id);
    bekomme jedoch aus mir total suspekten Gründen folgende Fehlermeldung:

    Code:
    Action: 'ALTER TABLE adresses ADD FOREIGN KEY (postalCodes_id) REFERENCES postalCodes(id)'
    
    Error: 'Error Code: 1005
    Can't create table 'testtable.#sql-10e0_94' (errno: 150)'
    Der Fehler kommt nur beim hinzufügen vom foreign key der camelCase Tabelle 'postalCodes' vor, das hinzufügen des foreeign key´s für 'states' funktioniert einwandfrei.

    Also meine Frage: Was mache ich falsch? (Win 7, MySQL 5.5)

    Thx für eure Antworten!

  • #2
    Hallo,

    auf dem gleichen System (Win7, MySQL5.5) und mit demselben Code kommt bei mir kein Fehler. Führ mal die Statements einzeln aus, um sicherzugehen, dass nicht zwischendrin schon ein Fehler passiert.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hab Sie alle einzeln aufgerufen... gleicher Fehler...

      Hmm es lag wohl an der Einstellung die ich in der my.ini hatte:

      Code:
      lower_case_table_names=0
      Wenn ich diese Einstellung auskommentiere, kommt kein Fehler.

      Allerdings sollte die Einstellung verhindern, dass alle Tabellennamen automatisch in kleinbuchstaben umgewandelt werden.

      Das heißt, dass jetzt zwar der Fehler weg ist, die Tabelle aber nicht mehr wie gewünscht postalCodes sondern postalcodes heißt...

      Hat jemand ne Idee wie auch camelCase Tabellennamen unterstützt werden?

      Kommentar


      • #4
        Ich würde Underscores statt Camelcase verwenden. Bei Großbuchstaben gibt es immer Dinge, die man beachten muss. Bei Underscores gibt's praktische nie Probleme.

        Kommentar


        • #5
          Werde ich wahrscheinlich nicht drum rum kommen

          Find das nur echt schade, da ich eigentlich alles einheitlich halten wollte...

          Wenn ich ein Objekt (bzw. eine Doctrine Entity) mit dem Namen PostalCode habe, soll die Tabelle nicht unbedingt postal_codes heißen... 'PostalCodes' wäre da viel naheliegender und nach meinem Geschmack auch schöner.

          Vorallem weil camelCase bei Columns wiederum kein Problem sind, frage ich mich wo da das große Problem ist. Natürlich ist Windows case-insensetive und es könne zu problemen kommen wenn ich zwei tabellen mit gleichem namen aber unterschiedlichem case anlegen würde, darauf könnte man als entwickler aber schon selber achten...

          Kommentar


          • #6
            Zitat von polonese Beitrag anzeigen
            Wenn ich ein Objekt (bzw. eine Doctrine Entity) mit dem Namen PostalCode habe, soll die Tabelle nicht unbedingt postal_codes heißen... 'PostalCodes' wäre da viel naheliegender und nach meinem Geschmack auch schöner.
            "PostalCodes" ist aber auch wieder was anderes als "PostalCode". Außerdem sieht man so auf den ersten Blick den Unterschied zwischen Datenbank- und Entitiyname. Ich stelle mir das Potenzial für Verwirrungen bei PostalCode -> PostalCodes deutlich größer vor als bei PostalCode -> postal_code.

            Zitat von polonese Beitrag anzeigen
            Vorallem weil camelCase bei Columns wiederum kein Problem sind, frage ich mich wo da das große Problem ist. Natürlich ist Windows case-insensetive und es könne zu problemen kommen wenn ich zwei tabellen mit gleichem namen aber unterschiedlichem case anlegen würde, darauf könnte man als entwickler aber schon selber achten...
            Auch bei Spalten würde ich Konsequent auf die Kleinschreibweise setzen. So sieht man deutlich was ein Entity-Attribut und was ein Spaltenname ist (außer bei einteiligen Namen).
            Zuletzt geändert von h3ll; 29.05.2011, 16:54.

            Kommentar


            • #7
              Okay, überredet

              thx!

              Kommentar

              Lädt...
              X