0

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

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

2 回答 2

1

您的外键中有一个错字:
FOREIGN KEY (users_password) REFERENCES users_details_one(users_spassword)应该是FOREIGN KEY (users_password) REFERENCES users_details_one(users_password)

并且您还需要table上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)   
);

索引不必是唯一的。

从手册

MySQL 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会在引用表上自动创建此类索引。

于 2015-04-14T15:52:14.360 回答
0

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

于 2015-04-14T15:49:21.753 回答