MySQL Error 150无法将Genre作为外键从Genre表分配到Album表中

时间:2016-03-17 15:38:41

标签: mysql mysql-error-150

我不知道为什么错误代码会一直弹出。我要做的是将我的Album表中的Genre列设置为链接到类型表中的Genre列的外键。但是每当我尝试在专辑的SQL命令中将Genre实现为外键时,我一直收到错误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上使用的代码尝试将相册中的流派设为外键

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

任何人都可以帮我理解出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

如果你把:

`Genre` int(11) NOT NULL,

KEY `Genre` (`Genre`),
相册中的

。 然后以下工作:

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

不工作的原因是:

  1. 类型不匹配
  2. 类型不是专辑中的关键
  3. 您没有引用Genres的主键
  4. 请在此处查看扩展说明:

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

答案 1 :(得分:0)

您只能使用Genre(Genre.Genre_id)中的主键字段作为外键。你不能使用Genre.Genre。

"一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY。"

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