【问题标题】:MySQL - Adding varchar as a foreign keyMySQL - 添加 varchar 作为外键
【发布时间】:2018-03-31 11:30:22
【问题描述】:

我正在尝试添加一个 varchar 值作为外键。

我尝试在 Password_Encryption 表中添加一个 KEY,但这不起作用。然后我尝试创建一个 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);

【问题讨论】:

  • 我还在 Stack Overflow 上查看了其他答案。我已经尽我所能尝试了它们,但我仍然无法让它发挥作用。
  • 请描述两个表之间的关系。
  • Password_Encryption 表中的 password_encryption 变量是取自 Login 表的外键,具有相同的命名变量。我不知道它的代码。

标签: mysql indexing foreign-keys


【解决方案1】:

您可以通过运行SHOW ENGINE INNODB STATUS\G 并查看LATEST FOREIGN KEY ERROR 部分来获得更详细的错误消息。

在您的情况下,您需要在父列 (Login.password_encryption) 上创建索引以创建外键约束。

【讨论】:

  • @RickJames 是的,它不必是唯一的。我会更新我的答案。
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2020-08-27
  • 2017-05-10
相关资源
最近更新 更多