【问题标题】:MYSQL Foreign Key, Cant create table (errno:150)MYSQL 外键,无法创建表 (errno:150)
【发布时间】:2015-06-20 07:17:55
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    您还需要在表users_details_one 中对users_emailusers_password 进行索引,例如:

    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 需要外键和引用键的索引,以便 外键检查可以很快并且不需要表扫描。在里面 引用表,必须有外键所在的索引 列按相同顺序列为第一列。这样一个 如果没有,则在引用表上自动创建索引 存在。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 没有。它们不需要是主键或唯一的。然而,它们确实需要被索引。
      猜你喜欢
      • 2014-04-05
      • 2010-12-17
      • 2016-06-08
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2013-07-22
      相关资源
      最近更新 更多