Fehler "Tabelle kann nicht erstellt werden" beim Hinzufügen von FOREIGN KEY

8

Ich habe die Tabelle nach Skript erstellt:

%Vor%

Dann versuche ich einen Fremdschlüssel hinzuzufügen:

%Vor%

Und erhalten Sie den folgenden Fehler:

%Vor%

Was ist los?

Ich renne

%Vor%

Es folgt der neueste Fremdschlüsselfehler:

%Vor%

Aber es hilft mir nicht zu erkennen, was falsch ist.

Ich benutze Windows Vista, MySql 5.5.11

UPDATE:

Das Problem tritt auf, wenn ich von MySql 5.0.67 aufrüste.

    
sergtk 04.05.2011, 19:17
quelle

5 Antworten

4

Hintergrund

  

FEHLER 1005 (HY000): Kann 'Sandkasten der Tabelle nicht herstellen. # sql-c28_4c' (errno: 150)

Wenn Sie MySQL zu ALTER TABLE befehlen, führt es die folgenden Schritte aus:

  1. Kopieren Sie die Daten aus der vorhandenen Tabelle in eine neue temporäre Tabelle.
  2. Ändern Sie die Struktur der neuen temporären Tabelle
  3. lösche die alte Tabelle
  4. Benennen Sie die temporäre Tabelle in old_table_name um.

Problem
Ihre Anfrage schlägt in Schritt 1 fehl.
Beachten Sie, dass Tabellennamen mit Dateien verknüpft sind.
Bei Linux-Tabellennamen wird zwischen Groß- und Kleinschreibung unterschieden

Unter Windows wird nicht zwischen Groß- und Kleinschreibung unterschieden.

Antwort
Da Sie offensichtlich Linux ausführen, muss der Fall der Tabelle, auf die Sie sich beziehen, wahrscheinlich derselbe sein wie in der Definition dieser Tabelle alles kleingeschrieben.
Sie verwenden Windows, daher sollte die Groß- / Kleinschreibung kein Problem sein, vielleicht ist es das Tool, das Sie verwenden, ich hatte auch dieses Problem, und die Verwendung aller Kleinbuchstaben für Tabellennamen löste meine Probleme.

Richtige Antwort
Stellen Sie die Systemvariabel

ein %Vor%

Um dieses Problem zu lösen.

Beachten Sie, dass, wenn Sie REFERENCES unter Windows haben, Ihre Windoze-Box in eine case sensitive Linux-Box verwandelt wird, soweit es MySQL betrifft!

Link
Ссылка

    
Johan 04.05.2011, 20:43
quelle
1

Problemumgehung gefunden.

Der Tabellenname sollte nach REFERENCES in Kleinbuchstaben stehen.

%Vor%

Sieht in MySql 5.5.11 wie ein Fehler aus.

FI. phpmyadmin kann keinen Fremdschlüssel hinzufügen.

Export erzeugt auch Kleinbuchstaben Tabellenname.

MySql 5.1.56 funktioniert wie erwartet.

    
sergtk 04.05.2011 20:21
quelle
1

In meinem Fall war es aufgrund der Tatsache, dass das Feld, das ein Fremdschlüsselfeld war, einen zu langen Namen hatte, d. %Code%. Versuchen Sie es kürzer. Fehlermeldung ist in diesem Fall ein bisschen irreführend.

Auch Felddefinitionen müssen gleich sein (achten Sie auf foreign key (some_other_table_with_long_name_id) Subtyp).

    
Kangur 07.10.2014 13:15
quelle
0

Ich denke, Ihre Erklärung Ihres Fremdschlüssels könnte falsch sein, je nachdem, was Sie wirklich wollten. Dies scheint zu sagen, dass 'parentID' von 'Table1' das 'id' Feld von 'Table1' referenzieren wird.

%Vor%

Vielleicht versuchen Sie das:

%Vor%     
John Kane 04.05.2011 19:27
quelle
0

Ich hatte die selbe Ausnahme:

%Vor%

Das Problem, das ich hatte, war, dass das Feld, auf das ich den Fremdschlüssel setzen wollte, nicht NULL sein durfte :) Nachdem ich herausgefunden hatte, dass es erlaubt war, null zu sein, fing alles an zu arbeiten.

Natürlich war das in der ursprünglichen Frage nicht der Fall, ich wollte nur andere über eine mögliche Lösung informieren.

    
tomazahlin 18.12.2014 16:34
quelle

Tags und Links