2013-05-03 75 views
0

假设我想为登录页面创建一个表来保存用户名和密码,并将其引用到其他表中以存储角色。使用两个外键创建表失败

CREATE TABLE Login (
username VARCHAR(50) NOT NULL, 
password VARCHAR(50) NOT NULL, 
PRIMARY KEY (username) 
); 

Create Table User (
username VARCHAR(50) NOT NULL, 
password VARCHAR(50) NOT NULL, 
FOREIGN KEY(password) REFERENCES Login(password), 
FOREIGN KEY(username) REFERENCES 
Login(username) 
); 

看起来与包含密码相关,因为插入数据时它需要是非空字段。表用户可能有一个整数用于存储角色或类似的东西,但我试图简化一下这个例子。

我收到以下错误:

ERROR 1005 (HY000): Can't create table 'databasename.user' (errno:150) 

Error 150 is a type mismatch but they appear to be the same type - not null and varchar(50) 

回答

1

外键只能指向唯一字段....主键字段隐式唯一。但密码不是。

0

你的主键是唯一一个在登录表,但您创建触发只能有一个主键在登录表中的两个外键

CREATE TABLE Login (
username VARCHAR(50) NOT NULL, 
password VARCHAR(50) NOT NULL, 
PRIMARY KEY (username) 
); 

Create Table User (
username VARCHAR(50) NOT NULL, 
password VARCHAR(50) NOT NULL, 
FOREIGN KEY(username) REFERENCES 
Login(username) 
);