MYSQL外键,无法创建表(错误号:150)

时间:2015-04-14 15:29:24

标签: mysql foreign-keys mysql-error-150

我正在尝试为我的系统构建数据库和表。但我发现如果我不在代码中添加外键。没有错误。我已经使用了很多方法尝试使代码工作,但它仍然有错误。

Create table if not exists users_details_one
(
    fname varchar(255),
    lname varchar(255),
    address varchar(255),
    users_email varchar(255),
    users_password varchar(255),
    department varchar(255)
 );

Create table if not exists users_one
(
    users_email varchar(255),
    users_password varchar(255) ,

    FOREIGN KEY (users_email) REFERENCES users_details_one(users_email),

    FOREIGN KEY (users_password) REFERENCES users_details_one(users_password)   
);

2 个答案:

答案 0 :(得分:1)

外键中有拼写错误:
FOREIGN KEY (users_password) REFERENCES users_details_one(users_spassword)应为FOREIGN KEY (users_password) REFERENCES users_details_one(users_password)

并且您还需要表users_email中的users_passwordusers_details_one上的索引,例如:

Create table if not exists users_details_one
(
    fname varchar(255),
    lname varchar(255),
    address varchar(255),
    users_email varchar(255),
    users_password varchar(255),
    department varchar(255),
    index (users_email),
    index (users_password)
 );

Create table if not exists users_one
(
    users_email varchar(255),
    users_password varchar(255) ,

    FOREIGN KEY (users_email) REFERENCES users_details_one(users_email),

    FOREIGN KEY (users_password) REFERENCES users_details_one(users_password)   
);

索引不必是唯一的。

from the manual

  

MySQL要求外键和引用键上的索引   外键检查可以很快,不需要表扫描。在里面   引用表时,必须有一个索引所在的外键   列以相同顺序列为第一列。这样的   如果不是,则会自动在引用表上创建索引   存在。

答案 1 :(得分:0)

如果要将列作为外键,那些列必须是主键,必须具有唯一性约束,即在您的情况下users_details_one的users_email和users_password必须是唯一键或主键。