2015-04-14 4 views
0

Я пытаюсь создать базу данных и таблицы для своей системы. Но я обнаружил, что если я не добавлю внешний код в коды. Ошибок нет. Я использовал много методов, чтобы заставить коды работать, но у них все еще есть ошибка.Внешний ключ MYSQL, 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) 
); 

ответ

1

Там опечатка в вашем внешнем ключе:
FOREIGN KEY (users_password) REFERENCES users_details_one(users_spassword) должен быть FOREIGN KEY (users_password) REFERENCES users_details_one(users_password)

и вы также должны индексы users_email и users_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) 
); 

не нужно для того, чтобы индекс был уникальным.

from the manual

MySQL требует индексов на внешних ключей и ссылочных ключей, так что внешнего ключа проверки может быть быстрым и не требует сканирования таблицы. В таблице ссылок должен быть указатель, в котором столбец внешнего ключа перечислены в качестве первых столбцов в том же порядке. Такой индекс автоматически создается в справочной таблице, если он не существует .

+0

Большое спасибо, что сработало :) –

+0

отлично. не стесняйтесь принять ответ, вы счастливы :) –

0

Если вы хотите, чтобы сделать столбец в качестве внешнего ключа, эти столбцы должны быть либо первичные ключи ауры должны иметь ограничение уникальности то есть в вашем случае users_email и users_password из users_details_one должны быть уникальными или первичными ключами.

+0

no. они не должны быть первичными ключами ИЛИ уникальными. однако их нужно индексировать. –

Смежные вопросы