2012-07-22 103 views
0

我有一个查询,但其详细显示错误#1005和150。一些innodbMysql查询错误#1005 150

如何解决此问题?

CREATE TABLE `iars` (`id` int(10) unsigned NOT NULL auto_increment, 
`SessionId` int(10) unsigned NOT NULL, 
`TeacherId` int(10) unsigned NOT NULL, 
`courseid` int(4) unsigned NOT NULL, 
`semester` int(4) unsigned NOT NULL, 
`PaperId` int(4) unsigned NOT NULL, 
`groupid` int(4) unsigned NOT NULL, 
`Type` varchar(4) default 1, 
PRIMARY KEY (`id`), 
UNIQUE KEY `Constrint_Index` 
(`SessionId`,`TeacherId`,`courseid`,`semester`,`PaperId`,`groupid`), 
KEY `FK_tid` (`TeacherId`), 
KEY `FK_gid` (`GroupId`), 
KEY `FK_pid` (`PaperId`), 
CONSTRAINT `FK_gid` FOREIGN KEY (`GroupId`) REFERENCES `groups` (`id`) ON DELETE 
CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_pid` FOREIGN KEY (`PaperId`) REFERENCES `papers` (`p_id`) ON DELETE 
CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_ssessionid` FOREIGN KEY (`SessionId`) REFERENCES `sessions` (`id`) ON 
DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `FK_tid` FOREIGN KEY (`TeacherId`) REFERENCES `teachers` (`id`) ON DELETE 
CASCADE ON UPDATE CASCADE) 
+0

你是否检查过[这个问题](http://stackoverflow.com/questions/4063141/mysql-foreign-key-error-1005-errno-150) – Vatev 2012-07-22 15:02:08

+0

我做过。但不能把事情做好。 – 2012-07-22 15:03:35

+0

你可以发布外键引用的其他表的结构 – Vatev 2012-07-22 15:09:52

回答

2

the MySQL manual

不能发出DROP TABLE用于由外键约束引用一个InnoDB表,除非你做SET FOREIGN_KEY_CHECKS = 0。当你删除一个表,约束在其创建声明中定义的内容也将被删除。

如果您重新创建了一个已删除的表,它必须具有一个符合引用它的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上有索引。如果这些不满足,MySQL将返回错误号1005并引用错误消息中的错误150。

这意味着您的其他表格之一可能引用了您不重新创建的iars中的一列。然后,解决方案是遍历所有表(通过describe查询)并查看引用的位置,并在此处将引用列添加到CREATE TABLE中,或者根据您的模式删除引用。

编辑从后来所引用页面上一个非常有用的宝石:

SHOW ENGINE INNODB STATUS; 

揭示载荷对刚刚发生的外键的错误良好的信息。它应该指出你需要看的地方。

+0

谢谢。它真的帮助了错误的事情。 – 2012-07-22 16:54:32

相关问题