我正在构建一个问答网站,并将用户帐户链接到我希望登录表中的用户名成为问题表的外键的问题,因此当用户提出问题时,必须将其链接他或她的用户名。我可以不拥有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));
答案 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)
这里有两个问题:
作为一般规则,您的外键引用需要使用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));
以下是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));