2017-10-19 1 views
0

Ich versuche, einen Varchar-Wert als Fremdschlüssel hinzuzufügen.MySQL - Varchar als Fremdschlüssel hinzufügen

Ich habe versucht, einen KEY innerhalb der Password_Encryption-Tabelle hinzuzufügen, aber das hat nicht funktioniert. Dann habe ich versucht, einen INDEX zu erstellen, und das hat auch nicht funktioniert.

Der Fehler, den ich bekomme, ist "Fehlercode: 1215. Kann keine Fremdschlüsseleinschränkung hinzufügen".

Ich bin mir bewusst, dass das Komma in der PRIMARY KEY-Zeile von Password_Encryption einen Fehler verursachen würde.

Die Tabellen Ich habe diesbezüglich sind

CREATE TABLE Login (
login_id INT NOT NULL AUTO_INCREMENT, 
login_date DATE NOT NULL, 
customer_id INT DEFAULT 0, 
business_id INT DEFAULT 0, 
password_entered VARCHAR(16) DEFAULT 'password', 
password_encryption VARCHAR(20), 
PRIMARY KEY (login_id, login_date) 
); 

CREATE TABLE Password_Encryption (
encryption_id INT NOT NULL AUTO_INCREMENT, 
login_id INT NOT NULL, 
password_encryption VARCHAR(20), 
password_saved VARCHAR(16) NOT NULL, 
is_valid ENUM('false','true') NOT NULL DEFAULT 'false', 
/*KEY pw_enc (password_encryption),*/ 
PRIMARY KEY (encryption_id), 
/*CONSTRAINT pw_enc FOREIGN KEY (password_encryption) REFERENCES Login 
(password_encryption)*/ 
); 

CREATE INDEX pw_enc ON Password_Encryption(password_encryption); 

ALTER TABLE Password_Encryption 
ADD CONSTRAINT pw_enc FOREIGN KEY (password_encryption) REFERENCES Login (password_encryption); 
+0

Ich habe mir auch andere Antworten auf Stack Overflow angesehen. Ich habe sie so gut wie möglich ausprobiert und kann es immer noch nicht zur Arbeit bringen. –

+1

Bitte beschreiben Sie die Beziehung zwischen den beiden Tabellen. –

+0

Die Variable password_encryption in der Password_Encryption-Tabelle ist ein Fremdschlüssel, der aus der Login-Tabelle mit derselben benannten Variablen stammt. Ich kenne den Code dafür nicht. –

Antwort

2

Sie können eine detailliertere Fehlermeldung erhalten, indem SHOW ENGINE INNODB STATUS\G und Blick auf die LATEST FOREIGN KEY ERROR Abschnitt ausgeführt wird.

In Ihrem Fall müssen Sie einen Index für die übergeordnete Spalte erstellen (Login.password_encryption), um eine Fremdschlüsseleinschränkung zu erstellen.

+0

Warum "einzigartig"? .. –

+0

@RickJames wahr, es muss nicht einzigartig sein. Ich werde meine Antwort aktualisieren. –

+0

Das hat funktioniert, danke! –

Verwandte Themen