假设我想为登录页面创建一个表来保存用户名和密码,并在其他表中引用它来存储角色。
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)
答案 0 :(得分:1)
外键只能指向一个唯一的字段....主键字段是隐式唯一的。但密码不是。
答案 1 :(得分: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)
);