2016-03-17 3 views
0

Не знаю, почему код ошибки продолжает появляться. То, что я пытаюсь сделать, - установить столбец «Жанр» в моей таблице альбома на внешний ключ, который ссылается на столбец «Жанр» в таблице жанров. Но каждый раз, когда я пытаюсь реализовать Genre в качестве внешнего ключа в команде SQL в альбомах, я продолжаю получать ошибку 150 без указания того, что может быть ошибкой. Поскольку информация о поле идентична в обеих таблицах.Ошибка MySQL 150 Невозможно назначить жанр в качестве внешнего ключа из таблицы жанра в таблицу альбомов

код за моим столом Альбомы

CREATE TABLE `Albums` (  
`Album_id` int(6) NOT NULL auto_increment, 
`Album_Name` varchar(32) NOT NULL,   
`Number_Of_Tracks` int(11) NOT NULL,   
`Genre` varchar(32) NOT NULL,   
`Track_id` int(6) NOT NULL,   
`Artist_id` int(6) NOT NULL,   
PRIMARY KEY  (`Album_id`),   
KEY `Track_id` (`Track_id`),   
KEY `Artist_id` (`Artist_id`),  CONSTRAINT `Albums_ibfk_1` 
FOREIGN KEY (`Track_id`) REFERENCES `Tracks` (`Track_id`),  CONSTRAINT `Albums_ibfk_2`  
FOREIGN KEY (`Artist_id`) REFERENCES `Artist` (`Artist_id`)) 
ENGINE=InnoDB 
DEFAULT CHARSET=latin1 

код за моей Жанр таблицы

CREATE TABLE `Genre` (  
`Genre_id` int(11) NOT NULL auto_increment, 
`Genre` varchar(32) NOT NULL,   
PRIMARY KEY  (`Genre_id`)) 
ENGINE=InnoDB DEFAULT CHARSET=latin1 

код, я использую на SQL, чтобы попытаться сделать Жанр в альбомах a Внешний ключ

ALTER TABLE Albums 
ADD FOREIGN KEY (`Genre`) 
REFERENCES Genre (`Genre`) 

Может кто-нибудь помочь мне понять, что происходит не так?

+3

ЬшоВВ разрешает внешний ключ, чтобы ссылаться на любой столбец индекса или группы столбцов. Однако в ссылочной таблице должен быть индекс, в котором ссылочные столбцы указаны в качестве первых столбцов в том же порядке. (Http://dev.mysql.com/doc/refman/5.1/en/create-table-foreign-keys.html). ** Пожалуйста, ПРОЧИТАЙТЕ ДОКУМЕНТАЦИЮ **. Кроме того, я рекомендую использовать столбец int (11) в таблице «альбомы» и использовать существующий цифровой ключ в качестве ссылки (вместо символьного представления жанра) – Pred

+0

Так что, поскольку жанр в жанровой таблице не является первым столбец, поэтому он приходит с ошибкой? –

+0

Прочтите еще раз :) – Pred

ответ

1

Если вы поставите:

`Genre` int(11) NOT NULL, 

и

KEY `Genre` (`Genre`), 

Альбомы. Тогда следующие работы:

ALTER TABLE Albums 
ADD FOREIGN KEY (`Genre`) 
REFERENCES Genre (`Genre_id`); 

Причины не работают, являются:

  1. Несоответствие типа
  2. Жанр не является ключевым в Альбомы
  3. Вы не ссылающийся на первичный ключ жанров

Ищите расширенные разъяснения:

Error Code: 1215. Cannot add foreign key constraint (foreign keys)

+0

Я пробовал следующее безрезультатно. ALTER TABLE tbl_Albums ИЗМЕНИТЬ COLUMN'Genre' INT (11) NOT NULL, ADD KEY 'Genre' (' Genre'), ADD FOREIGN KEY ('Genre'), ЛИТЕРАТУРЫ tbl_Genre (' Genre_id') –

+0

Сначала делают ALTER TABLE tbl_Albums MODIFY COLUMN Жанр int (11) NOT NULL, ADD KEY Жанр (Жанр); затем запустите ALTER TABLE Альбомы ДОБАВИТЬ ВНЕШНИЙ КЛЮЧ ('Жанр') ССЫЛКИ Жанр (' Genre_id'); –

+0

Наконец-то! Оно работает! Спасибо огромное! –

0

Вы можете использовать только поля первичного ключа в жанре (Genre.Genre_id) в качестве внешнего ключа. Вы не можете использовать Genre.Genre.

«ИНОСТРАННЫЙ КЛЮЧ в одном столе указывает на ПЕРВИЧНЫЙ КЛЮЧ в другой таблице».

http://www.w3schools.com/sql/sql_foreignkey.asp