2016-06-27 4 views
-1

я получаю сообщение об ошибке при создании таблицы с внешними ключамиMySQL таблицы не создает

create table _users(_id int(20) unsigned NOT NULL AUTO_INCREMENT, 
_user_fullname varchar(50)not null, 
_user_username varchar(160) not null, 
_user_password varchar(200) not null,_user_remember_me tinyint, 
_user_email varchar(30), 
_user_mobile varchar(15), 
_user_age varchar(10) 
,primary key(_id,_user_email,_user_mobile)); 

_users таблица созданных successfully..there не было никаких ошибок ..

Но когда я хочу создать работник стол:

CREATE TABLE employee (_Id INT NOT NULL AUTO_INCREMENT, 
_user_mobile VARCHAR(15) not null, 
_name varchar(15), 
_org varchar(10), 
PRIMARY KEY (_Id), 
foreign key (_user_mobile) references _users(_user_mobile)); 

Его ошибка показывает:

ERROR 1005 (HY000): Can't create table 'DB.employee' (errno: 150) 

Что я делаю неправильно?

+0

Можете ли вы выполнить show create table _users и задать вопрос –

+2

Неправильное соответствие внешнего ключа. У пользователей pk есть три столбца, но вы пытаетесь добавить fk только к одному из них. – jarlh

+1

http://stackoverflow.com/questions/4061293/mysql-cant-create-table-errno-150 должен помочь. –

ответ

0

Проблема в внешней части ключа. Если вы удалите это, таблица будет создана без проблем.

Если вам нужно использовать этот внешний ключ, вам необходимо использовать InnoDB в качестве механизма хранения MySQL. InnoDB позволяет ограничению внешнего ключа ссылаться на не уникальный ключ, как видно из here.

1

150 является внешним ключом ошибка:

C:\>perror 150 
MySQL error code 150: Foreign key constraint is incorrectly formed 

Получение точное сообщение об ошибке очень сложно. Вы должны запустить этот запрос:

show engine innodb status 

... и поиск на выходе:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
160627 14:09:32 Error in foreign key constraint of table test/employee: 
foreign key (_user_mobile) references _users(_user_mobile)): 
Cannot find an index in the referenced table where the 
referenced columns appear as the first columns, or column types 
in the table and the referenced table do not match for constraint. 
Note that the internal storage type of ENUM and SET changed in 
tables created with >= InnoDB-4.1.12, and such columns in old tables 
cannot be referenced by such columns in new tables. 
See http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 
for correct foreign key definition. 

После того, как вы знаете, что это было бы легко добавить отсутствующий индекс:

ALTER TABLE `_users` 
ADD UNIQUE INDEX `_user_email` (`_user_email`); 

Но я бы не стал, если бы был вами. Странно использовать номер мобильного телефона в качестве ключа. Вместо этого, просто упростить первичный ключ:

create table _users(_id int(20) unsigned NOT NULL AUTO_INCREMENT, 
_user_fullname varchar(50)not null, 
_user_username varchar(160) not null, 
_user_password varchar(200) not null,_user_remember_me tinyint, 
_user_email varchar(30), 
_user_mobile varchar(15), 
_user_age varchar(10) 
,primary key(_id)); 

... и использовать в связанной таблице:

CREATE TABLE employee (_Id INT NOT NULL AUTO_INCREMENT, 
_user_id int(20) unsigned not null, 
_name varchar(15), 
_org varchar(10), 
PRIMARY KEY (_Id), 
foreign key (_user_id) references _users(_id)); 
2

Эй В этом случае вам просто нужно сделать одну вещь, вам просто нужно добавить индекс опорного столбца таблицы пользователя, а затем запустить создать таблицу для сотрудника

ALTER TABLE `_users` ADD INDEX (`_user_mobile`); 

После выполнения выше запроса просто запустить под запрос: -

CREATE TABLE `employee`(
    `_Id` INT(11) NOT NULL AUTO_INCREMENT, 
    `_user_mobile` VARCHAR(15) NOT NULL, 
    `_name` VARCHAR(15), 
    `_org` VARCHAR(10), 
    PRIMARY KEY (`_Id`), 
    FOREIGN KEY (`_user_mobile`) REFERENCES `_users`(`_user_mobile`)); 

Таким образом, вы избавитесь от ошибки 1005 mysql, которая говорит, что вам нужно иметь индекс в ссылочном столбце родительской таблицы.

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