SQL不会允许我添加外键?

时间:2017-07-08 15:05:43

标签: mysql

我正在构建一个问答网站,并将用户帐户链接到我希望登录表中的用户名成为问题表的外键的问题,因此当用户提出问题时,必须将其链接他或她的用户名。我可以不拥有varchar数据类型的外键吗?或者外键必须只是另一个表的主键?我得到的错误是“关键列”'用户名'在表格中不存在“。我做错了什么?

create table login (user_id int NOT NULL AUTO_INCREMENT, username 
varchar (100), password varchar (100), primary key (user_id));

create table questions (q_id int not null auto_increment, question 
varchar (100), primary key (q_id), foreign key (username) references 
login (username)); 

4 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

create table login (username 
varchar (100), password varchar (100), primary key (username));

create table questions (q_id int not null auto_increment, question 
varchar (100), primary key (q_id), username varchar(100),foreign key (username) references 
login (username)); 

create table answers (a_id int not null auto_increment, answer varchar (100), primary key (a_id), q_id int, foreign key (q_id) references questions (q_id));

我在这里测试了它:http://sqlfiddle.com/#!9/61ec2a

你需要:

1) Make Login.UserName unique
2) Declare UserName in the questions table

答案 1 :(得分:0)

请记住,外键是,应该与其他相关联。现在,username是一个表中的简单列,那么它如何成为另一个表的列?

外键的目的是显示表之间的关系。你必须在你要关联的表中都有相同的列。

答案 2 :(得分:0)

这里有两个问题:

  1. 您的问题表没有用户名列。它必须。即便如此,由于问题2,它也行不通。
  2. 作为一般规则,您的外键引用需要使用user_id而不是用户名。原因是Fk引用通常从列开始并以主键值结束。

    创建表问题(q_id int not null auto_increment,user_id int not null,question varchar(100),primary key(q_id),foreign key(user_id)references login(user_id));

  3. 以下是related question

    的详细阐述

答案 3 :(得分:0)

  

正确的方法是,

create table login (user_id int NOT NULL AUTO_INCREMENT, username 
varchar (100), password varchar (100), primary key (user_id));

create table questions (q_id int not null auto_increment, question 
varchar (100), primary key (q_id), foreign key (user_id) references 
login (user_id));