2015-03-13 7 views
0

Может кто-то пожалуйста, объясните причину для следующей ошибки: «Не удается создать таблицу„деятельности“(ERRNO: 150)»Что является причиной для MySQL: Errorno 150

Я под understading, что типы данных и длины должны быть одинаковыми, имеет ли какое-либо отношение к автоматическому приращению?

Create Table `LinkMemberActivity` (

`LinkID` int(11) unsigned NOT NULL AUTO_INCREMENT, 

`MID` int(11) unsigned NOT NULL, 

`AID` int(11) unsigned NOT NULL, 

PRIMARY KEY (`LinkID`), 
FOREIGN KEY (`MID`) REFERENCES Members(`MID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
            ) 
CREATE TABLE `Activities` (

`AID` int(11) unsigned NOT NULL AUTO_INCREMENT, 

`Name` varchar(25) DEFAULT NULL, 

`MaxCapacity` int(25) DEFAULT NULL, 

`StartTime` time DEFAULT NULL, 

`EndTime` time DEFAULT NULL, 

PRIMARY KEY (`AID`), 
FOREIGN KEY (`AID`) REFERENCES LinkMemberActivity(`AID`)) 
ENGINE=InnoDB DEFAULT CHARSET=latin1); 
+0

Указанный столбец должен быть основным или уникальным ключом, этот LinkMemberActivity ('AID') – Mihai

+0

Ссылка на ваш внешний ключ относится к столбцу, который не индексирован. –

+0

Можно ли объяснить немного дальше? @GordonLinoff –

ответ

0

Вы пытаетесь сделать столбец первичного ключа полем, зависящим от внешнего ключа. Это не только необычно, но и не имеет смысла в datamodel, если только он не является составной частью сложного ключа. Обычная практика имеет внешний ключ столбца, зависящий от первичного ключа других таблиц. Не знаете, какие у вас есть причины для того, как вы разработали свой datamodel таким образом, но вы можете исправить эту проблему, создав столбец с неинвазивным автоинкрементами с именем ID и сделайте этот столбец первичным ключом. Затем удалите автоинкремент из помощи.