2016-11-01 2 views
2

Ich habe eine Tabelle users formatiert alsMySQL Fehler 1215 - Kein Fremd hinzufügen Schlüsselbedingung

---------+------------+---------+-------+---------+--------+ 
    Field | type  | NULL | Key | Deault | Extra | 
------------------------------------------------------------ 
user_id | varchar(50)|  NO | PRI | NULL |  | 

folgt Ich habe auch eine Tabelle history wie folgt formatiert:

---------+------------+---------+-------+---------+--------+ 
    Field | type  | NULL | Key | Deault | Extra | 
------------------------------------------------------------ 
trans_id | int(11) |  NO | PRI | NULL |auto_inc| 
------------------------------------------------------------ 
    id  |varchar(50) | NO |  | NULL |  | 

Als ich das laufen folgenden Befehl erhalte ich ein error code 1215: cannot add foreign key constraint.

ALTER TABLE history 
ADD FOREIGN KEY (id) 
REFERENCES users(user_id) 

ich möchte um sicherzustellen, dass, wenn ein Eintrag in history eingefügt wird, der eingesteckte id mit user_id in users übereinstimmt. Was muss ich tun, um users.user_id einen Fremdschlüssel für history.id zu machen?

Antwort

1

Ihr Code ist korrekt, aber Ihre Datentypen müssen genau übereinstimmen, damit sie funktionieren. Da es nicht funktioniert, verwenden Sie höchstwahrscheinlich unterschiedliche Kollatierungen für Ihre varchar-Spalten.

Sortierungen werden nicht angezeigt, wenn Sie describe verwenden. Verwenden Sie daher show create table users und show create table history, um zu überprüfen, und passen Sie dann eine Ihrer Sortierungen so an, dass sie übereinstimmen.

1

Das Problem möglicherweise, dass history.id nicht indiziert ist. Um eine Fremdschlüsseleinschränkung hinzuzufügen, muss die bestimmte Spalte indiziert werden.

In Ihrer Geschichte Skript erstellen (wenn Sie bereit sind, neu zu erstellen, die Tabellen sind), bevor die Einschränkung hinzufügen, können Sie Folgendes eingeben:

INDEX 'id_index' ('id', ASC) 

Oder die aktuelle Tabelle geben Sie einfach zu ändern:

CREATE INDEX id_index 
ON history(id,ASC) 

Der "ASC" bedeutet, dass er in aufsteigender Reihenfolge indiziert wird.

Sie können hier mehr über die Indizierung lesen: http://dev.mysql.com/doc/refman/5.7/en/create-index.html

Sie können hier über Fremdschlüssel in MySQL lesen: https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

Auch, gründlich zu sein, stellen Sie sicher, dass Sie nicht zu verwenden „id“ versuchen, als Fremdschlüssel mehr als einmal, da fremde Schlüsselnamen eindeutig sein müssen.

Verwandte Themen