簡體   English   中英

MYSQL外鍵,無法創建表(errno:150)

[英]MYSQL Foreign Key, Cant create table (errno: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)   
);

您的外鍵中有一個錯字:
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上的users_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需要在外鍵和引用鍵上建立索引,以便外鍵檢查可以快速進行,而無需進行表掃描。 在引用表中,必須有一個索引,其中外鍵列以相同的順序列為第一列。 如果這樣的索引不存在,則會在引用表上自動創建。

如果要使列作為外鍵,則這些列必須是主鍵,或者必須具有唯一性約束,即在您的情況下,users_details_one的users_email和users_password必須是唯一鍵或主鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM