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)
4

2 回答 2

1

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

于 2013-05-03T02:58:27.567 回答
0

您的主键在 Login 表中只有一个,但您创建了两个外键,触发了 Login 表中的唯一一个主键

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)
);
于 2013-05-03T02:55:26.093 回答