我正在建立一个问答网站,并将用户帐户链接到问题,我希望登录表中的用户名是问题表的外键,因此当用户提出问题时,必须将其链接到他或她的用户名。 我可以没有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)); 

===============>>#1 票数: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

===============>>#2 票数:0

请记住,外键是一个 ,应该与另一个链接。 现在, username是一个表中的简单列,那么如何将其作为另一表的列呢?

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

===============>>#3 票数:0

这里有两个问题:

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

    创建表问题(q_id int不为空,auto_increment,user_id int不为空,问题varchar(100),主键(q_id),外键(user_id)引用登录名(user_id));

这是一个相关问题的详细阐述:

===============>>#4 票数: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)); 

  ask by do734 translate from so

未解决问题?本站智能推荐: