2017-10-19 74 views
0

我想添加一個VARCHAR值作爲外鍵。MySQL的 - 添加VARCHAR作爲一個外鍵

我試圖添加Password_Encryption表中的關鍵,但不能正常工作。然後我嘗試創建一個INDEX,但這也不起作用。

我得到的錯誤是「錯誤代碼:1215無法添加外鍵約束」。

據我所知,在Password_Encryption的PRIMARY KEY線逗號會導致錯誤。

我已經與此表是

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

我也看過堆棧溢出的其他答案。我竭盡所能地嘗試了他們,但仍然無法實現。 –

+1

請描述兩個表格之間的關係。 –

+0

Password_Encryption表中的password_encryption變量是取自具有相同命名變量的Login表的外鍵。我不知道它的代碼。 –

回答

2

您可以通過運行SHOW ENGINE INNODB STATUS\G來看,在LATEST FOREIGN KEY ERROR部分獲得更詳細的錯誤信息。

在你的情況,你需要以創建一個外鍵約束創建父列(Login.password_encryption)的索引。

+0

爲什麼「獨特」? –

+0

@RickJames是真的,它不一定是唯一的。我會更新我的答案。 –

+0

工作,謝謝! –